vue圖片預加載


目的: 圖片預加載能夠使得用戶在瀏覽后續頁面的時候,不會出現圖片加載一半導致瀏覽不流暢的情況。

一、方法一

項目打開的時候要對圖片進行預加載,在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了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM