第39章 簡(jiǎn)述圖片懶加載的實(shí)現(xiàn)原理

一、定義

當(dāng)打開(kāi)一個(gè)有很多圖片的頁(yè)面時(shí),先只加載頁(yè)面上看到的圖片,等滾動(dòng)到頁(yè)面下面時(shí),再加載所需的圖片。這就是圖片懶加載。

二、作用

減少或延遲請(qǐng)求數(shù),緩解瀏覽器的壓力,增強(qiáng)用戶(hù)體驗(yàn)。

三、實(shí)現(xiàn)方式

  1. 設(shè)置圖片src屬性為同一張圖片,同時(shí)自定義一個(gè)data-src屬性來(lái)存儲(chǔ)圖片的真實(shí)地址
  2. 頁(yè)面初始化顯示的時(shí)候或者瀏覽器發(fā)生滾動(dòng)的時(shí)候判斷圖片是否在視野中
  3. 當(dāng)圖片在視野中時(shí),通過(guò)js自動(dòng)改變?cè)搮^(qū)域的圖片的src屬性為真實(shí)地址
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
  
  <style>
    .container{
      max-width: 600px;
      margin: 0 auto;
    }
    .container::after{
      content: '';
      display: block;
      clear: both;
    }
    .container img{
      float: left;
      width: 50%;
    }
    h1{
      clear: both;
    } 
    /* 因?yàn)閕mg都是浮動(dòng),如果不清除浮動(dòng),h1的值高度就相當(dāng)于container里面最高的,不是實(shí)際的數(shù)值 */
  </style>
  
<body>
  <div class="container">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="1" data-src="http://cdn.jirengu.com/book.jirengu.com/img/1.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="2" data-src="http://cdn.jirengu.com/book.jirengu.com/img/2.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="3" data-src="http://cdn.jirengu.com/book.jirengu.com/img/3.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="4" data-src="http://cdn.jirengu.com/book.jirengu.com/img/4.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="5" data-src="http://cdn.jirengu.com/book.jirengu.com/img/5.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="6" data-src="http://cdn.jirengu.com/book.jirengu.com/img/6.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="7" data-src="http://cdn.jirengu.com/book.jirengu.com/img/7.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="8" data-src="http://cdn.jirengu.com/book.jirengu.com/img/8.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="9" data-src="http://cdn.jirengu.com/book.jirengu.com/img/9.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="10" data-src="http://cdn.jirengu.com/book.jirengu.com/img/10.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="11" data-src="http://cdn.jirengu.com/book.jirengu.com/img/11.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="12" data-src="http://cdn.jirengu.com/book.jirengu.com/img/12.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="13" data-src="http://cdn.jirengu.com/book.jirengu.com/img/13.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="14" data-src="http://cdn.jirengu.com/book.jirengu.com/img/14.jpg">
    <h1 id="target">hello</h1>
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="15" data-src="http://cdn.jirengu.com/book.jirengu.com/img/15.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="16" data-src="http://cdn.jirengu.com/book.jirengu.com/img/16.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="17" data-src="http://cdn.jirengu.com/book.jirengu.com/img/17.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="18" data-src="http://cdn.jirengu.com/book.jirengu.com/img/18.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="19" data-src="http://cdn.jirengu.com/book.jirengu.com/img/19.jpg">
    <img src="http://smashinghub.com/wp-content/uploads/2014/08/cool-loading-animated-gif-3.gif" alt="20" data-src="http://cdn.jirengu.com/book.jirengu.com/img/20.jpg">    
  </div>
  
  <script>
    
    start()/* 一開(kāi)始窗口沒(méi)有滾動(dòng),也需要觸發(fā)一次 */
    
    $(window).on('scroll', function(){
      start()
    })
    
    function start(){
       /*提高性能,不用每張圖片都檢查一遍,加載了的圖片不檢測(cè)*/
      $('.container img').not('[data-isLoaded]').each(function(){
        var $node = $(this)
        if(isShow($node)){
          //沒(méi)必要為了為了效果減慢加載速度,懶加載本來(lái)就是為了提高響應(yīng)速度的
          //setTimeout(function(){
            loadImg($node)
          //},500)
        }
      })      
    }
    
    function isShow($node){
      return $node.offset().top <= $(window).height() + $(window).scrollTop()
    }
    
    function loadImg($img){
      $img.attr('src', $img.attr('data-src'))
      $img.attr('data-isLoaded', 1)
    }
    
  </script>
  
</body>
</html>

效果預(yù)覽

?著作權(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,155評(píng)論 1 92
  • 一、定義 當(dāng)打開(kāi)一個(gè)有很多圖片的頁(yè)面時(shí),先只加載頁(yè)面上看到的圖片,等滾動(dòng)到頁(yè)面下面時(shí),再加載所需的圖片。這就是圖片...
    5吖閱讀 15,888評(píng)論 0 3
  • 對(duì)于一個(gè)有多個(gè)圖片的網(wǎng)站來(lái)說(shuō),訪(fǎng)問(wèn)的時(shí)候不應(yīng)該直接加載所有圖片,而是應(yīng)該只講瀏覽器窗口內(nèi)的圖片進(jìn)行加載。當(dāng)滾動(dòng)的時(shí)...
    DeeJay_Y閱讀 19,141評(píng)論 9 15
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,818評(píng)論 1 45
  • 特別聲明:此篇文章內(nèi)容來(lái)源于@Jeremy Wagner的《Lazy Loading Images and Vid...
    Naeco閱讀 30,877評(píng)論 0 32

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