細(xì)說(shuō)jQuery如何實(shí)現(xiàn)懶加載

一、為什么需要懶加載?

  • 對(duì)于圖片過(guò)多的使用場(chǎng)景,為了提高頁(yè)面加載速度,改善用戶體驗(yàn),我們對(duì)未出現(xiàn)在視野范圍內(nèi)的圖片先不進(jìn)行加載,等到出現(xiàn)在視野范圍才去加載。

二、懶加載的實(shí)現(xiàn)原理

-它的實(shí)現(xiàn)原理很簡(jiǎn)單,先把img的src指向一個(gè)小圖片,圖片真實(shí)的地址存儲(chǔ)在img一個(gè)自定義的屬性里,<img src="lazy-load.png" data-src="xxx" />,等到此圖片出現(xiàn)在視野范圍內(nèi)了,獲取img元素,把data-src里的值賦給src。

三、實(shí)現(xiàn)懶加載必備的知識(shí)點(diǎn)

(一)獲取窗口、窗口滾動(dòng)和元素距離窗口頂部的偏移高度,計(jì)算元素是否出現(xiàn)在窗口可視范圍內(nèi);
Paste_Image.png
    function isShow($el){
      var winH = $(window).height(),//獲取窗口高度
            scrollH = $(window).scrollTop(),//獲取窗口滾動(dòng)高度
            top = $el.offset().top;//獲取元素距離窗口頂部偏移高度
      if(top < scrollH + winH){
          return true;//在可視范圍
        }else{
          return false;//不在可視范圍
        }
      }
(二)監(jiān)聽(tīng)窗口滾動(dòng)事件,檢查元素是否在可視范圍內(nèi);
    $(window).on('scroll', function(){//監(jiān)聽(tīng)滾動(dòng)事件
        checkShow();
    })
    checkShow();
    function checkShow(){//檢查元素是否在可視范圍內(nèi)
        $('img').each(function(){//遍歷每一個(gè)元素
            var $cur = $(this);
            if(!!isloaded($cur)){return;}//判斷是否已加載
            if (isShow($cur)) {
              setTimeout(function(){
                showImg($cur);
                },300)//設(shè)置時(shí)間是為了更好的看出效果
            };
        });
    }
(三)元素顯示的時(shí)候把之前的默認(rèn)照片替換成data-src里的照片。
    function showImg($el){
        $el.attr('src', $el.attr('data-src'));
        $cur.data('isloaded',true);
    }
Paste_Image.png
Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,135評(píng)論 1 92
  • 1、懶加載 1.什么是懶加載? 懶加載也就是延遲加載。當(dāng)訪問(wèn)一個(gè)頁(yè)面的時(shí)候,先把img元素或是其他元素的背景圖片路...
    xiaolizhenzhen閱讀 70,620評(píng)論 18 160
  • 如何判斷一個(gè)元素是否出現(xiàn)在窗口可視范圍(瀏覽器的上邊緣和下邊緣之間,肉眼可視)。寫(xiě)一個(gè)函數(shù) isVisible實(shí)現(xiàn)...
    _Dot912閱讀 1,772評(píng)論 10 8
  • 1、懶加載1.什么是懶加載?懶加載也就是延遲加載。當(dāng)訪問(wèn)一個(gè)頁(yè)面的時(shí)候,先把img元素或是其他元素的背景圖片路徑替...
    Gaochengxin閱讀 406評(píng)論 1 2
  • 題目1:如何判斷一個(gè)元素是否出現(xiàn)在窗口可視范圍(瀏覽器的上邊緣和下邊緣之間,肉眼可視)。寫(xiě)一個(gè)函數(shù) isVisib...
    蕭雪圣閱讀 1,496評(píng)論 0 0

友情鏈接更多精彩內(nèi)容