vue图片预加载
程序员文章站
2023-03-25 12:44:13
目的: 图片预加载能够使得用户在浏览后续页面的时候,不会出现图片加载一半导致浏览不流畅的情况。 一、方法一 项目打开的时候要对图片进行预加载,在App.vue里面的beforeCreate添加预加载程序 App.vue 二、方法二 创建两个文件名称分别为imgPreloader.js以及imgPre ......
目的: 图片预加载能够使得用户在浏览后续页面的时候,不会出现图片加载一半导致浏览不流畅的情况。
一、方法一
项目打开的时候要对图片进行预加载,在app.vue里面的beforecreate添加预加载程序
app.vue
beforecreate(){ let count = 0; let imgs = [ //用require的方式添加图片地址,直接添加图片地址的话,在build打包之后会查找不到图片,因为打包之后的图片名称会有一个加密的字符串 require('xxx') ] for (let img of imgs) { let image = new image(); image.src = img; image.onload = () => { count++; }; } }
二、方法二
创建两个文件名称分别为imgpreloader.js以及imgpreloaderlist.js,前者用于导出图片加载的异步方法imgpreloader,后者用于存放图片列表
然后在main.js里面,vue对象创建之前,必须先把图片全部加载完才能创建vue对象并且挂载到#app上
1.imgpreloaderlist.js
export default [ require('相对图片地址1'), require('相对图片地址2'), ... ];
2.imgpreloader.js
const imgpreloader = url => { return new promise((resolve, reject) => { let image = new image(); image.src = url; image.onload = () => { resolve(); }; image.onerror = () => { reject(); }; }); }; export const imgspreloader = imgs => { let promisearr = []; imgs.foreach(element => { promisearr.push(imgpreloader(element)); }); return promise.all(promisearr); };
3.main.js
// 导入图片预加载方法以及图片列表 import { imgspreloader } from './config/imgpreloader.js'; import imgpreloaderlist from './config/imgpreloaderlist.js'; (async () => { await imgspreloader(imgpreloaderlist); //关闭加载弹框 document.queryselector('.loading').style.display = 'none'; new vue({ router, store, render: h => h(app) }).$mount('#app'); })();
4.加载弹框
main.js提到加载弹框,那么这个弹框要加在哪里呢?答案是index.html
<style> /* *加载弹框的样式 */ </style> <body> <div class="loading"> </div> </body>
三、总结
方法二的效果较方法一更符合一般的需求,方法一可能图片还没完全加载完成,就执行beforemount了。