经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Vue.js » 查看文章
Vue一个动态添加background-image的实现
来源:jb51  时间:2023/3/14 8:46:03  对本文有异议

Vue一个动态添加background-image

一开始不知道该怎么弄,后面查了下,应该这样使用

  1. ?<div @click="dialogVisible = true" :style="?
  2. ? ? ?{backgroundImage:'url('+personalData.avatar+')'}"> ? ?
  3. ? ? ??
  4. ? ? ? ? ? ? ? ? ? ? <div>
  5. ? ? ? ? ? ? ? ? ? ? ? ? <!-- <div></div> -->
  6. ? ? ? ? ? ? ? ? ? ? ? ? <p>修改头像</p>
  7. ? ? ? ? ? ? ? ? ? ? </div>
  8. ?</div>

Vue踩坑background-image路径

在前端开发中,background-image属性非常常见,有很多时候需要使用内联样式来绑定此属性,但是在vue项目中,如果如下面代码填写路径会找不到图片

  • 项目中图片都放在src/img文件夹,img和background-image引用都用相对路径,即../../../这种形式。
  • 在项目打包build设置路径assetsPublicPath:'./',然后哪些没有转成base64的背景图都失效了。
  1. <script type="text/javascript">
  2. import TemplateNav from './TemplateNav'
  3. export default {
  4. name: 'FooterNav',
  5. components: {
  6. 'TemplateNav': TemplateNav
  7. },
  8. data() {
  9. return {
  10. //使用相对路径会找不到图片
  11. shouye:'url(../../assets/images/shouye/index2x.png)',
  12. fenlei:'url(../../assets/images/shouye/fenlei2x.png)',
  13. search:'url(../../assets/images/shouye/search2x.png)',
  14. shopcart:'url(../../assets/images/shouye/gouwuche2x.png)',
  15. mine:'url(../../assets/images/shouye/I2x.png)'
  16. }
  17. },
  18. props: {
  19. num: {
  20. default: '0'
  21. }
  22. },
  23. }
  24. </script>

报错如下:404(Not Found)

 正确的路径应该如下面这样

  1. data() {
  2. return {
  3. shouye:'url(' + require('../../assets/images/shouye/index2x.png') + ')',
  4. fenlei:'url(' + require('../../assets/images/shouye/fenlei2x.png') + ')',
  5. search:'url(' + require('../../assets/images/shouye/search2x.png') + ')',
  6. shopcart:'url(' + require('../../assets/images/shouye/gouwuche2x.png') + ')',
  7. mine:'url(' + require('../../assets/images/shouye/I2x.png') + ')'
  8. }
  9. },

使用require()方法,require()是node.js方法。

结合实际情况,处理方法如下

img标签:

  1. <img :src="require('../../../assets/images/icons/icon-add-pc.svg')">

背景图:

  1. <div :style="{backgroundImage:'url('+require('../../../assets/images/icon/icon-add-pc.svg')+')'}"></div>
  2. //i标签
  3. <i :style="{backgroundImage:'url('+require('../../assets/home/ic-0-01.svg')+')'}"></i>

扩展:图片格式(base64)

图片的base64编码就是可以将一张图片数据编码成一串字符串,使用该字符串代替图像地址url。

使用base64图片的优点:

  • 减少http请求次数
  • 采用base64的图片随着页面一起下载,因此不会存在跨域请求的问题
  • 没有图片更新要上传图片,因此不会造成清理图片缓存的问题。

使用base64图片的缺点:

  • 增加css文件的大小,比http请求大30%左右
  • 浏览器兼容性,支持ie10及以上
  • 解析css的时间增长

base64图片与csssprites技术

精灵图技术就是将图片合成一个大的图片,将多次图片请求合成一张大的请求,以此来达到减少http请求的次数。

对于base64图片常见误区

base64虽然有优点,但是其缺点也很明显,在使用上存在一些明显的缺陷

  • 使用base64不代表性能优化,使用base64减少了http请求,但是增加了css文件的体积,css文件体积增大意味着CPR的阻塞
  • CPR(Critical Rendering Path,关键渲染路径):当浏览器从服务器接收到一个HTML页面的请求时,到屏幕上渲染出来要经过很多个步骤。浏览器完成这一系列的运行,或者说渲染出来我们常常称之为“关键渲染路径”。
  • 图片不会导致关键路径的阻塞,而转换为base64后大大增加了css文件的体积,css文件的体积直接影响渲染,导致空白屏幕时间增长,html和css会阻塞渲染,而图片不会阻塞渲染。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号