vue本地图片切换(vue动态加载本地图片的处理方法)
vue本地图片切换
vue动态加载本地图片的处理方法发现问题
今天遇到一个在vue文件中引入本地图片的问题,于是有了这篇文章。
通常,我们的一个img标签在html中是这么写的:
<img src="../images/demo.png">
这种写法只能引用相对路径下的图片。不能使用绝对路径。使用绝对路径的话,这类资源将会直接被拷贝,而不会经过 webpack 的处理。
如果src是变量的话,我们一般会在data中定一个变量src进行动态绑定。
<img :src="src"> //data中定义变量src data() { return { src: '../images/demo.png' } }
然而这时候,会发现这个时候图片并没有被加载出来,图片没有显示出来,通过查看发现这张图片的地址显示 ../images/demo.png ,也就是说通过v-bind形式绑定的相对路径不会被webpack的file-loader处理,只会做简单的文本替换。
那怎么办呢?
解决方法
1、将图片转**base64**格式
<img src="data:image/png;base64,iVBYKIGloxxxxxxxxxxxxxxxxxxx...">
一般图片比较小的可以这么做,比如图标icon等,大小一般在10KB以内的。
2、使用**import**引入图片
<img :src="src"> //使用import引入 import img from '../images/demo.png' //data中定义变量src data() { return { src: img } }
3、使用**require**动态加载
<img :src="src"> //data中定义变量src data() { return { src: require('../images/demo.png') } }
4、引入**publicPath**并且将其拼接在路径中,实现引入路径的动态变动
<img :src="publicPath + 'images/demo.jpg'" alt=""> // √ // 编译后: <img src="/foo/images/demo.jpg" alt=""> <script> export default:{ data(){ return { publicPath: process.env.BASE_URL, } }, } </script>
在vue.config.js中配置publicPath路径:
//vue.config.js module.exports = { publicPath:'/foo/', ... }
结论
静态资源可以通过两种方式进行处理:
- 在 JavaScript 被导入或在 template/CSS 中通过相对路径被引用。这类引用会被 webpack 处理。
- 放置在 public 目录下或通过绝对路径被引用。这类资源将会直接被拷贝,而不会经过 webpack 的处理。
原理
从相对路径导入
当你在 JavaScript、CSS 或 *.vue 文件中使用相对路径 (必须以 . 开头) 引用一个静态资源时,该资源将会被包含进入 webpack 的依赖图中。
在其编译过程中,所有诸如 <img src="...">、background: url(...) 和 CSS @import 的资源 URL 都会被解析为一个模块依赖。
用绝对路径引入时,路径读取的是public文件夹中的资源,任何放置在 public 文件夹的静态资源都会被简单的复制到编译后的目录中,而不经过 webpack特殊处理。
当你的应用被部署在一个域名的根路径上时,比如http://www.abc.com/,此时这种引入方式可以正常显示但是如果你的应用没有部署在域名的根部,那么你需要为你的 URL 配置 publicPath 前缀,publicPath 是部署应用包时的基本 URL,需要在 vue.config.js 中进行配置。
扩展
关于vue file-loader vs url-loader
如果我们希望在页面引入图片(包括img的src和background的url)。当我们基于webpack进行开发时,引入图片会遇到一些问题。
其中一个就是引用路径的问题。拿background样式用url引入背景图来说,我们都知道,webpack最终会将各个模块打包成一个文件,因此我们样式中的url路径是相对入口html页面的,而不是相对于原始css文件所在的路径的。这就会导致图片引入失败。这个问题是用file-loader解决的,file-loader可以解析项目中的url引入(不仅限于css),根据我们的配置,将图片拷贝到相应的路径,再根据我们的配置,修改打包后文件引用路径,使之指向正确的文件。
另外,如果图片较多,会发很多http请求,会降低页面性能。这个问题可以通过url-loader解决。url-loader会将引入的图片编码,生成dataURl。相当于把图片数据翻译成一串字符。再把这串字符打包到文件中,最终只需要引入这个文件就能访问图片了。当然,如果图片较大,编码会消耗性能。因此url-loader提供了一个limit参数,小于limit字节的文件会被转为DataURl,大于limit的还会使用file-loader进行copy。
**url-loader和file-loader是什么关系呢?**简答地说,url-loader封装了file-loader。url-loader不依赖于file-loader,即使用url-loader时,只需要安装url-loader即可,不需要安装file-loader,因为url-loader内置了file-loader。通过上面的介绍,我们可以看到,url-loader工作分两种情况:1.文件大小小于limit参数,url-loader将会把文件转为DataURL;2.文件大小大于limit,url-loader会调用file-loader进行处理,参数也会直接传给file-loader。因此我们只需要安装url-loader即可。
原文链接:https://www.cnblogs.com/weizaiyes/p/7461967.html
关于background url引入图片时
按照上面理论,如果我采用相对路径的方式引入图片的话,webpack会对其require处理。
background: url('./iphonexs.png') 0 0 no-repeat;
实际上确实如此,我看到页面的背景变成:
background: url(/resources/dist/images/iphonexs.a25bee7.png) 0 0 no-repeat;
这是根据url-loader的配置处理的结果。
或者采用动态style的方式:
<li :style="{'background': 'url(' + require('./iphonexs.png') + ') 0 0 no-repeat'}"> </li>
Reference
cli.vuejs.org/zh/guide/ht…
https://www.jb51.net/article/163170.htm
github.com/vuejs/vue-c…
总结
到此这篇关于vue动态加载本地图片的文章就介绍到这了,更多相关vue动态加载本地图片内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- vue动态生成的下拉框如何获取值(Vue 级联下拉框的设计与实现)
- vue前台解析pdf文件流(Vue实现在线预览pdf文件功能利用pdf.js/iframe/embed)
- vue3 props用法(vue3组合API中setup、 ref、reactive的使用大全)
- vue实现图片上传数据库(vue.js根据图片url进行图片下载)
- vue怎么引入axios(如何用vue封装axios请求)
- springbootvue数据交互系统(Springboot运用vue+echarts前后端交互实现动态圆环图)
- vue项目部署到服务器的nginx(Nginx部署vue项目和配置代理的问题解析)
- vue项目的一些手动配置(使用vue项目配置多个代理的注意点)
- vue是怎样进行页面跳转(Vue实现登陆跳转)
- vue定时器中间变颜色(Vue如何优雅的清除定时器)
- vue怎么操作表格(如何在在Vue3中使用markdown 编辑器组件)
- vue滚动条滚动事件(vue实现一个滚动条样式)
- vue高阶组件怎么用(vue更多筛选项小组件使用详解)
- vue和springboot分页开发实现(解决Vue+SpringBoot+Shiro跨域问题)
- vue页面关闭前的执行(Vue 页面监听用户预览时间功能的实现代码)
- vue如何加速(vue函数防抖与节流的正确使用方法)
- 庆余年剧组重聚王牌5,宋轶神秘消失,肖战出现一秒抢了李纯风头(庆余年剧组重聚王牌5)
- 巴厘岛旅游攻略(巴厘岛旅游攻略7天多少钱)
- 文莱旅游攻略(文莱旅游攻略介绍)
- 马来西亚旅游攻略(马来西亚旅游攻略自由行攻略)
- 缅甸旅游攻略(缅甸旅游攻略必去景点推荐)
- 《庆余年2》新消息,原班人马,肖战特别出演,这才是最好的安排(庆余年2新消息原班人马)
热门推荐
- 织梦cms怎么设置页面(织梦CMS调用问答栏目文章到首页实现方法分享)
- dedecms栏目怎么设置(织梦DedeCms实现调用单页文章内容的方法)
- 用css实现图片特效代码(HTML+CSS+JavaScript实现图片3D展览的示例代码)
- 怎么写css效果最好(提高CSS代码效率的编写技巧)
- nginxdocker界面(Docker部署nginx实现过程图文详解)
- python pandas dataframe 查询(Python实现从SQL型数据库读写dataframe型数据的方法基于pandas)
- linux磁盘分区学习教程交流(Linux磁盘分区实现原理及方法解析)
- 面试时在坐姿上应该注意什么
- web界面设计的建议
- laravel关于视图使用语法(在laravel中使用with实现动态添加where条件)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9