進階16:懶加載

題目1:如何判斷一個元素是否出現(xiàn)在窗口可視范圍(瀏覽器的上邊緣和下邊緣之間,肉眼可視)。寫一個函數(shù) isVisible實現(xiàn)

function isVisible($node){
    var scrollTop = $(window).scrollTop() //窗口滾動距離
    var windowHeight = $(window).height() //窗口的高度
    var offsetTop = $node.offset().top //目標元素相對于頁面頂部的偏移距離
//兩個臨界點,最小值是滾動高度,最大值是窗口高度加窗口滾動的距離
    if(offsetTop  < scrollTop + windowHeight && offsetTop > scrollTop){
          return true
    }
    return false
}

題目2:當窗口滾動時,判斷一個元素是不是出現(xiàn)在窗口可視范圍。每次出現(xiàn)都在控制臺打印 true 。用代碼實現(xiàn)

$(window).on('scroll',function(){
    if(isVisible($node){
        console.log(true)
    }
    function isVisible($node){
        var scrollTop = $(window).scrollTop() //窗口滾動距離
        var windowHeight = $(window).height() //窗口的高度
        var offsetTop = $node.offset().top //目標元素相對于頁面頂部的偏移距離
//兩個臨界點,最小值是滾動高度,最大值是窗口高度加窗口滾動的距離
        if(offsetTop  < scrollTop + windowHeight && offsetTop > scrollTop){
          console.log('true')
          return true
    }
    return false
    }
})

題目3:當窗口滾動時,判斷一個元素是不是出現(xiàn)在窗口可視范圍。在元素第一次出現(xiàn)時在控制臺打印 true,以后再次出現(xiàn)不做任何處理。用代碼實現(xiàn)

$(window).on('scroll',function(){
     $('.container img').each(function(){
    if( isVisible($(this)) && !isLoaded($(this)) ){   
//遍歷每個圖片如果出現(xiàn)在可視范圍內(nèi)并且沒有被加載過,加載圖片并且打印true,否則不做處理
      loadImg($(this))
      console.log("true")
    }
  }) 
})

function isVisible($img){           //檢查元素是否出現(xiàn)在窗口可視范圍
  var scrollTop = $(window).scrollTop()   //滾動高度
  var windowHeight = $(window).height()   //窗口高度
  var offsetTop = $img.offset().top  //頁面頂點至目標的高度
  if(offsetTop < scrollTop + windowHeight && offsetTop > scrollTop)  //兩個臨界點,一個最小值是滾動高度,一個最大值是滾動高度加窗口高度
   {
     return true
 }
 return false
}

function isLoaded($img){            //返回布爾值
  return $img.attr('data-src') === $img.attr('src')
}

function loadImg(#img) {
  $img.attr('src',$img.attr('data-src'))
}

題目4: 圖片懶加載的原理是什么?

  • 為什么要懶加載:
    懶加載即延遲,對于圖片過多的頁面,為了加快頁面加載速度,我們需要將頁面內(nèi)未出現(xiàn)在可視區(qū)域內(nèi)的圖片先不做加載, 等到滾動到可視區(qū)域后再去加載。
    這樣一來頁面加載性能大幅提升,提高了用戶體驗。
  • 實現(xiàn)原理:
    • 在頁面載入時將img標簽內(nèi)的src指向一個小圖片,即占位圖,將真實地址存放于一個自定義屬性data-src中,然后獲取頁面上的img標簽并保存,開啟一個定時器來遍歷保存的img標簽,接下來判斷每個img是否出現(xiàn)在可視區(qū),當某個img出現(xiàn)在了可視區(qū)域,就將真實地址賦值給該img的src并將該img從數(shù)組中刪除以避免重復判斷。
    • 判斷元素是否出現(xiàn)在了可視區(qū)
    • 實現(xiàn)流程:
      1.網(wǎng)頁滾動事件觸發(fā)
      2.執(zhí)行加載圖片操作
      3.判斷圖片是否在可視區(qū)且是否已經(jīng)加載過
      4.在可視區(qū)且未被加載過則動態(tài)地將data-src的值賦給該圖片的src屬性。

題目5: 實現(xiàn)視頻中的圖片懶加載效果

實現(xiàn):http://js.jirengu.com/jebafozuwa/1/edit

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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