vue 中对图片的处理
工作上接触了一下图片的处理,图片的格式是文件流, 记录如下。
请求图片
请求图片的时候,带上{ responseType: 'blob' }
, 否则图片显示的可能是乱码。
1 | axios |
显示图片
图片返回的是文件流的形式, 控制台中显示的是乱码。
直接显示二进制图片会出错,所以我们要进行处理。
1 | <!-- template中 --> |
1 | /*------ script中------*/ |
显示图片中,要对万一图片显示不出来的情况进行处理。使用onerror
事件可以对加载图片失败的情况进行处理。
1 | handleLoadError(e) { |
上传图片:使用 element-ui 的 el-upload
自动上传,一次传一张图片
1 | <el-upload |
1 | /*----- 以下为常用处理代码 ------*/ |
手动上传,一次提交多个 el-upload 的图片
要求:每个 picture area 限制选择一张图片,点击确定后一起提交。
1 | <el-upload |
1 | data(){ |
图片加载技术:预加载和懒加载
- 预加载:重点在”预”,在用户需要看到该图片之前,就已经加载和请求到该图片。
- 懒加载: 重点在”懒”,尽可能少的加载图片,只加载必需的图片(用户屏幕可视范围内),目的是尽可能的减少请求数,减缓服务器的压力。
在 vue 中懒加载的组件有很多,比如vue-lazy-laod
和vue-clazy-load
浏览器阻塞
同一时间对服务器的请求过多,将会造成浏览器阻塞。
浏览器默认对同一域下的资源,只保持一定的连接数,阻塞过多的连接,以提高访问速度和解决阻塞问题。
对于请求图片来说,有以下解决方法
- 使用雪碧图:把所有图片合成一张大图。
- 延迟加载:只去请求可视区的图片。
最后使用了延迟加载,对非可视区领域的图片延迟加载,优先加载可视区图片,减少图片的请求数。
1 | <img :src="imageUrl" ref="img" /> |
1 | // 方式一:延迟加载非可视区域 |
使用延时加载前的请求
使用延时加载后的请求
参考
[1]xmlhttprequest standard.the responsetype attribute
[2]xmlhttprequest.responsetype | mdn
[3]理解domstring、document、formdata、blob、file、arraybuffer数据类型 « 张鑫旭-鑫空间-鑫生活
[4]formdata 对象的使用 | mdn
[5]前端|加载的图片太多或者太大怎么办(上) - u012496505的博客 - csdn博客
[6]lazy loading images and video | web fundamentals | google developers
[7]an introduction to progressive image rendering
[8]原生 js 实现最简单的图片懒加载 - web前端 - 伯乐在线