最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript實現(xiàn)圖片懶加載的三種方案詳解

 更新時間:2023年12月26日 08:20:12   作者:起風了啰  
圖片懶加載,當圖片出現(xiàn)在可視區(qū)域再進行加載,提升用戶的體驗,這篇文章主要為大家整理了三個常用的圖片懶加載實現(xiàn)方法,希望對大家有所幫助

一、前言

圖片懶加載,當圖片出現(xiàn)在可視區(qū)域再進行加載,提升用戶的體驗。因為有些用戶不會看完圖片,全部加載會浪費流量。在網(wǎng)上查閱資料,總結了三種辦法,有各自的利弊,下文一一介紹。

方法優(yōu)點缺點推薦指數(shù)
設置img loadingh5的屬性,沒有兼容問題需要已知圖片高度、寬高比????
IntersectionObserver API無需知道圖片高度低版本需引入polyfill??????
vue-lazyload 自定義指令無需知道圖片高度github現(xiàn)存issues較多,沒有解決????

二、實現(xiàn)方式及Demo

1. 設置img標簽loading屬性

loading屬性允許兩個值:eager立即加載圖像(默認值);lazy延遲加載圖像。在使用lazy屬性的時候,需要設置<img>標簽的高度,否則無法懶加載。

注意: 適用于兩種場景,圖片高度已知、圖片寬高比已知。

已知圖片高度

<style>
  .img-box img {
    width: 100%;
    height: 700px; /*設置為圖片的真實高度*/
  }
</style>

<div class="img-box">
  <img src="https://i.postimg.cc/GtN3Cs02/1.jpg" loading="lazy" />
  <img src="https://i.postimg.cc/hGdKLGdW/2.jpg" loading="lazy" />
  <img src="https://i.postimg.cc/T1SkJTbF/3.jpg" loading="lazy" />
  <img src="https://i.postimg.cc/wxPFPTtb/4.jpg" loading="lazy" />
  <img src="https://i.postimg.cc/FRkGF28x/5.jpg" loading="lazy" />
  <img src="https://i.postimg.cc/05JH9wqq/6.jpg" loading="lazy" />
</div>

已知圖片寬高比

 <style>
  .img-box div {
    position: relative;
    padding-top: 66%; /* (你的圖片的高度/寬度值) */
    overflow: hidden;
  }
  .img-box img {
    position: absolute;
    top:0;
    right:0;
    width:100%;
  }
</style>

<div class="img-box">
  <div>
    <img src="https://i.postimg.cc/GtN3Cs02/1.jpg" loading="lazy" />
  </div>
  <div>
    <img src="https://i.postimg.cc/hGdKLGdW/2.jpg" loading="lazy" />
  </div>
  <div>
    <img src="https://i.postimg.cc/T1SkJTbF/3.jpg" loading="lazy" />
  </div>
  <div>
    <img src="https://i.postimg.cc/wxPFPTtb/4.jpg" loading="lazy" />
  </div>
  <div>
    <img src="https://i.postimg.cc/FRkGF28x/5.jpg" loading="lazy" />
  </div>
  <div>
    <img src="https://i.postimg.cc/05JH9wqq/6.jpg" loading="lazy" />
  </div>
</div>

2. 使用 IntersectionObserver

IntersectionObserver接口,可以觀察DOM節(jié)點是否出現(xiàn)在視口,當DOM節(jié)點出現(xiàn)在視口中才加載圖片。img必須有高度,否則圖片默認都在視口中,會將圖片全部加載??梢栽O置img的src為base64白色圖片,然后在替換為真實的圖片地址。

注意: 不需要預先知道圖片的高度,但是有兼容性問題,低版本需要引入intersection-observer polyfill

已知圖片高度

<style>
    .img-box .lazy-img {
        width: 100%;
        height: 600px; /*如果已知圖片高度可以設置*/
    }
</style>

<div class="img-box">
  <img class="lazy-img" data-origin="https://images.djtest.cn/pic/test/d48aed7c991b43d850d011f2299d852e.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"/>
  <img class="lazy-img" data-origin="https://images.djtest.cn/pic/test/a588b152c79ac60162ecbdf82b060061.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"/>
  <img class="lazy-img" data-origin="https://images.djtest.cn/pic/test/eacbc2cd4b6ca636077378182bdfcc88.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"/>
  <img class="lazy-img" data-origin="https://images.djtest.cn/pic/test/751470f4b478450e8556f78cd7dd3d96.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"/>
  <img class="lazy-img" data-origin="https://images.djtest.cn/pic/test/e4a531bee5694a4a01dee74b18bbfd8b.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"/>
  <img class="lazy-img" data-origin="https://images.djtest.cn/pic/test/7d8f107e827a7beaa0b9d231bfa4187f.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"/>
  <img class="lazy-img" data-origin="https://images.djtest.cn/pic/test/4f7586f6b74f2bd0b94004fcbae69856.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"/>
  <img class="lazy-img" data-origin="https://images.djtest.cn/pic/test/863849e14e7e8903ed4b27fcbdafe8b0.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"/>
  <img class="lazy-img" data-origin="https://images.djtest.cn/pic/test/d8bb17fe9a7223f35075014ef250e2fa.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"/>
</div>

<script>
    function Observer() {
        let images = document.querySelectorAll(".lazy-img");
        let observer = new IntersectionObserver(entries => {
            entries.forEach(item => {
                if (item.isIntersecting) {
                    item.target.src = item.target.dataset.origin; // 開始加載圖片,把data-origin的值放到src
                    observer.unobserve(item.target); // 停止監(jiān)聽已開始加載的圖片
                }
            });
        });
        images.forEach(img => observer.observe(img));
    }
    Observer()
</script>

3. 使用vue-lazyload

在vue2中使用時,建議安裝npm i vue-lazyload@1.3.3 -s,使用高版本在main.js中全局自定義指令后依然無法使用指令。在vue3中可以使用 npm i vue3-lazy -s。

全局注冊自定義指令,在頁面就可以使用了

// 全局自定義指令
import Vue from 'vue'
import VueLazyload from 'vue-lazyload'
Vue.use(VueLazyload, {
  preLoad: 1,
  observer: true // 設置為true,內部使用IntersectionObserver。默認使用
})
/* 在頁面中直接使用 */
<div>
    <img v-lazy="https://images.djtest.cn/pic/test/d48aed7c991b43d850d011f2299d852e.jpg">
    <img v-lazy="https://images.djtest.cn/pic/test/a588b152c79ac60162ecbdf82b060061.jpg">
    <img v-lazy="https://images.djtest.cn/pic/test/eacbc2cd4b6ca636077378182bdfcc88.jpg">
    <img v-lazy="https://images.djtest.cn/pic/test/751470f4b478450e8556f78cd7dd3d96.jpg">
</div>

以上就是JavaScript實現(xiàn)圖片懶加載的三種方案詳解的詳細內容,更多關于JavaScript圖片懶加載的資料請關注腳本之家其它相關文章!

相關文章

  • 在JavaScript中,為什么要盡可能使用局部變量?

    在JavaScript中,為什么要盡可能使用局部變量?

    在JavaScript中,我們應該盡可能的用局部變量來代替全局變量,這句話所有人都知道,可是這句話是誰先說的?為什么要這么做?有什么根據(jù)么?
    2009-04-04
  • 前端axios下載excel文件(二進制)的處理方法

    前端axios下載excel文件(二進制)的處理方法

    新接了項目,遇到這樣的需求,通過后端接口下載excel文件,后端沒有文件地址,返回二進制流文件。接下來通過實例代碼給大家分享前端axios下載excel文件(二進制)的處理方法,一起看看吧
    2018-07-07
  • javascript實現(xiàn)拼圖游戲

    javascript實現(xiàn)拼圖游戲

    這篇文章主要為大家詳細介紹了javascript實現(xiàn)拼圖游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • JavaScript對象反射用法實例

    JavaScript對象反射用法實例

    這篇文章主要介紹了JavaScript對象反射用法,實例分析了反射DOM對象和自定義對象的具體用法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • Openlayers實現(xiàn)長度測量的方法

    Openlayers實現(xiàn)長度測量的方法

    在Openlayers中,使用ol/sphere模塊的getDistance函數(shù)可以計算兩點間的大圓距離,繪制線路時,通過監(jiān)聽繪制事件和幾何對象的變化,可實時更新距離,同時getLength函數(shù)幫助獲取整條線路的長度,這些功能主要用于地理信息系統(tǒng)中的距離測量和地圖制作
    2024-11-11
  • javascript實現(xiàn)獲取cookie過期時間的變通方法

    javascript實現(xiàn)獲取cookie過期時間的變通方法

    這篇文章主要介紹了javascript實現(xiàn)獲取cookie過期時間的變通方法,因為cookie過期時間是由瀏覽器控制的,所以想獲取過期時間只能通過本文的變通方法來實現(xiàn),需要的朋友可以參考下
    2014-08-08
  • 通過JAVASCRIPT讀取ASP設定的COOKIE

    通過JAVASCRIPT讀取ASP設定的COOKIE

    通過JAVASCRIPT讀取ASP設定的COOKIE...
    2006-11-11
  • js實現(xiàn)密碼強度檢驗

    js實現(xiàn)密碼強度檢驗

    這篇文章主要為大家詳細介紹了js密碼強度檢驗的實現(xiàn)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • javascript 模擬JQuery的Ready方法實現(xiàn)并出現(xiàn)的問題

    javascript 模擬JQuery的Ready方法實現(xiàn)并出現(xiàn)的問題

    今天在閱讀網(wǎng)上一些模擬Jq的ready方法時,發(fā)現(xiàn)一些小細節(jié),就是網(wǎng)上的ready事件大部分都是在onload事件執(zhí)行后加載,而jquery確能在onload加載前。
    2009-12-12
  • JavaScript數(shù)組基于交換的排序示例【冒泡排序】

    JavaScript數(shù)組基于交換的排序示例【冒泡排序】

    這篇文章主要介紹了JavaScript數(shù)組基于交換的排序,結合實例形式分析了JavaScript排序算法中的冒泡排序簡單實現(xiàn)技巧,需要的朋友可以參考下
    2018-07-07

最新評論

绿春县| 枣阳市| 湖北省| 华宁县| 南阳市| 修文县| 定州市| 上林县| 赤城县| 镇江市| 平顶山市| 新营市| 赞皇县| 含山县| 濮阳县| 项城市| 江孜县| 西畴县| 平南县| 武威市| 河北省| 台北市| 吐鲁番市| 山丹县| 田阳县| 郧西县| 嘉善县| 安新县| 称多县| 教育| 噶尔县| 确山县| 二连浩特市| 轮台县| 女性| 老河口市| 湖口县| 山丹县| 阜南县| 都兰县| 常山县|