整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          原生JAVASCRIPT實現圖片懶加載(lazylo

          原生JAVASCRIPT實現圖片懶加載(lazyload)

          圖片懶加載也是比較常見的一種性能優化的方法,最近在用vue做一個新聞列表的客戶端時也用到了,這里就簡單介紹下實現原理和部分代碼。


          實現原理

          加載頁面的時候,圖片一直都是流量大頭,針對圖片的性能方法也挺多的比如base64、雪碧圖等;懶加載也是其中一種,主要原理是將非首屏的圖片src設為一個默認值,然后監聽窗口滾動,當圖片出現在視窗中時再給他賦予真實的圖片地址,這樣可以保證首屏的加載速度然后按需加載圖片。

          具體代碼

          首先在渲染時,圖片引用默認圖片,然后把真實地址放在data-*屬性上面。

          <image src='./../assets/default.png' :data-src='item.allPics' class='lazyloadimg'>

          然后是監聽滾動,直接用window.onscroll就可以了,但是要注意一點的是類似于window的scroll和resize,還有mousemove這類觸發很頻繁的事件,最好用節流(throttle)或防抖函數(debounce)來控制一下觸發頻率。underscore和lodash里面都有封裝這兩個方法,這里先不多做介紹了。

          接著要判斷圖片是否出現在了視窗里面,主要是三個高度:1,當前body從頂部滾動了多少距離。2,視窗的高度。3,當前圖片距離頂部的距離。offsetTop相關屬性可以參考這里,具體代碼如下:

          window.onscroll=_.throttle(this.watchscroll, 200);

          watchscroll () {

          var bodyScrollHeight=document.body.scrollTop;// body滾動高度

          var windowHeight=window.innerHeight;// 視窗高度

          var imgs=document.getElementsByClassName('lazyloadimg');

          for (var i=0; i < imgs.length; i++) {

          var imgHeight=imgs[i].offsetTop;// 圖片距離頂部高度

          if (imgHeight < windowHeight + bodyScrollHeight) {

          imgs[i].src=imgs[i].getAttribute('data-src');

          img[i].className=img[i].className.replace('lazyloadimg','')

          }

          }

          }

          學習交流加群:230354270


          結語

          大概內容就這么多了,下次可能會補充一下防抖節流源碼的實現。最后再補充兩個常見的滾動判斷:

          1.頁面滾動離開首屏(這時可顯示回到頂部的按鈕):document.body.scrollTop > window.innerHeight

          2.頁面滾動到底部了(這時可去調接口獲取更多內容):window.scrollY + window.innerHeight > document.body.offsetHeight

          于一些擁有大量圖片的網站來說,如果一個頁面有超過 50 張圖片,就會造成網站頁面加載太慢以及移動端耗費流量太大。就像前幾天給理想做的作品頁面,頁面上至少200張圖,為了解決這樣的問題,可以使用LazyLoad按需加載,又稱懶加載。

          LazyLoad按需加載

          做個筆記,圖片如何實現懶加載(LazyLoad按需加載)

          什么是LazyLoad按需加載

          LazyLoad按需加載采用圖片按需加載技術,打開頁面時只會加載首屏圖片。訪客往下滾動時才會陸續加載需要展現的圖片,這樣非常高效,體驗舒適。

          做個筆記,圖片如何實現懶加載(LazyLoad按需加載)

          做個筆記,圖片如何實現懶加載(LazyLoad按需加載)

          LazyLoad按需加載實現方法

          我們在自己做網站時,也可以實現LazyLoad按需加載,增強網站的用戶體驗。下面學做網站論壇就來介紹一下LazyLoad按需加載實現方法。(以下會使用到HTML代碼,如果對代碼不熟悉,可以學習一下html視頻教程)

          引入LazyLoad按需加載必須的二個文件:jquery.js和jquery.lazyload.js。引入方法很簡單,只需將下面的代碼放到</head>標簽上方即可;

          <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script><script src="https://raw.githubusercontent.com/tuupola/jquery_lazyload/master/jquery.lazyload.min.js"></script>

          做個筆記,圖片如何實現懶加載(LazyLoad按需加載)

          網站上所有圖片都使用以下的格式書寫:

          <img class="lazy" src="" data-original="圖片地址" width="100" height="100" alt="">

          做個筆記,圖片如何實現懶加載(LazyLoad按需加載)

          在網站的</body>標簽上面,放上以下的JS代碼,來實現LazyLoad按需加載(懶加載);

          <script type="text/javascript">$(function() { $("img.lazy").lazyload({ threshold : 200, // 設置閥值 effect : "fadeIn" // 設置圖片漸入特效 });});</script>

          做個筆記,圖片如何實現懶加載(LazyLoad按需加載)

          這樣,我們自己在建網站時,也可以輕松實現LazyLoad按需加載(懶加載)了。快去自己的網站上試試吧!

          azyload圖片加載通常用在圖片很多的項目里,需要翻好幾頁,如果一打開頁面就將所有的圖片加載出來,會耗費很多性能,以及會讓用戶等待較長時間,為了有一個更好的用戶體驗,Lazyload圖片懶加載就應運而生。Lazyload讓圖片只有在可視區域時才會加載出來。

          應用這個組件需要注意的點是,即便我們之前有安裝和引入vant框架,但這個Lazyload需要重新安裝重引用。

          import VueLazyload from 'vue-lazyload'
          Vue.use(VueLazyload)
          

          準備工作:

          1. 創建一個頁面: Lazyload.vue
          2. 在router.js里配置Lazyload頁面的路由
          {
           path: '/lazyload',
           name: 'lazyload',
           component: ()=> import('./views/Lazyload')
           }
          
          1. 在index.vue里添加一項
          <a href="javascript:void(0)" @click="$router.push('/lazyload')">
           <van-col span="6" class="marb20">
           <van-icon name="pending-deliver" />
           <div>Toast 圖片懶加載</div>
           </van-col>
          </a>
          

          至今為止呢,我們的首頁顯示的樣式子是這樣滴?不知道不覺間我們已經學完了33個組件了!哇噢,為自己歡呼一下吧!如果想看更多的內容,歡迎關注我,每天都有更新哈。

          代碼演示Lazyload 圖片懶加載:

          基本方法:

          <img 
           class="img" 
           v-for="img in imageList"
           v-lazy="img"
          >
          

          v-lazy: 懶加載的圖片,其值為圖片的路徑。

          data() {
           return {
           imageList: [
           require('../assets/01.jpg'),
           require('../assets/02.jpg'),
           require('../assets/03.jpg'),
           require('../assets/04.jpg'),
           ]
           }
           },
          

          就在演示這段代碼時總是出錯,說找不到指令,最后發現是vant又更新了,需要重新安裝,這才成功。說明vant框架更新的頻率很高,用著會越來越好用的。以上代碼需要說明一點的是在data里引入圖片的方式,如果直接引用路徑會因為定位不到相對路徑會出錯,需require一下才可以。如圖:

          背景懶加載:

          <div 
           class="img" 
           v-for="img in imageList"
           v-lazy:background-image="img"
           />
          

          css部分:

          .img {
           width: 100%;
           height: 300px;
           background-size: 100%
          }
          

          背景圖片也是可以懶加載的,只不過改成了v-lazy:background-image="img"。這里需要注意的一點是需要給這個容器定義寬度和高度以及background-size。背景圖片顯示不出來。

          模塊懶加載:

          懶加載模塊會用到lazy-component,需要在main.js里設置一下。

          Vue.use(VueLazyload, {
           lazyComponent: true
          });
          

          options有如下, options是在引入VueLazyload時設置:

          loading: 加載時的圖片

          error: 錯誤時的圖片

          preload: 預加載高度的比例

          azyComponent: 是否能懶加載模塊

          <lazy-component>
           <img 
           class="img"
           v-for="img in imageList"
           v-lazy="img"
           >
           </lazy-component>
          

          更多關于Lazyload應用方法可以看下官方文檔

          到目前為止呢,Lazyload就演示完了!慶祝一下我們又學完一個組件啦!

          今天就到這里啦。休息休息一會兒吧?明天繼續加油噢!加油


          主站蜘蛛池模板: 亚洲av永久无码一区二区三区| 一区二区无码免费视频网站| 91一区二区三区| 精品国产一区二区三区久| 国产精久久一区二区三区 | 无码一区二区三区老色鬼| 一区二区三区观看| 国产在线观看一区二区三区| 免费观看日本污污ww网站一区| 国产精品无码一区二区在线观| 精品国产一区二区麻豆| 欧美亚洲精品一区二区| 超清无码一区二区三区| 国产爆乳无码一区二区麻豆| 日韩精品无码一区二区三区免费| 日本在线一区二区| 无码人妻视频一区二区三区| 免费看一区二区三区四区| 激情一区二区三区| 无码AV中文一区二区三区| 夜夜精品无码一区二区三区| 性色AV一区二区三区| 蜜桃无码一区二区三区| 中文字幕乱码人妻一区二区三区 | 中文字幕一区二区视频| 在线免费视频一区| 在线一区二区三区| 国产乱码精品一区二区三| 精品视频一区二区三区在线观看 | 国产一区二区四区在线观看| 性无码免费一区二区三区在线| 3d动漫精品成人一区二区三| 国模私拍福利一区二区| 国产美女一区二区三区| 在线精品自拍亚洲第一区| 国产日韩高清一区二区三区| 91无码人妻精品一区二区三区L| 波多野结衣一区视频在线| 亚洲一区二区三区高清| 精品不卡一区二区| 免费人人潮人人爽一区二区|