img 的data-src 屬性及懶加載


一、什么是圖片懶加載

當訪問一個頁面的時候,先把img元素或是其他元素的背景圖片路徑替換成一張大小為1*1px圖片的路徑(這樣就只需請求一次),當圖片出現在瀏覽器的可視區域內時,才設置圖片真正的路徑,讓圖片顯示出來。這就是圖片懶加載。

通俗一點:
1、就是創建一個自定義屬性data-src存放真正需要顯示的圖片路徑,而img自帶的src放一張大小為1 * 1px的圖片路徑
2、當頁面滾動直至此圖片出現在可視區域時,用js取到該圖片的data-src的值賦給src。
ps:自定義屬性可以取任何名字


HTML:

html.png
html.png

CSS:

<style>
 .container {
  max-width: 800px;
  margin: 0 auto;
}
.container:after{
  content: '';
  display: block;
  clear: both;
}
.container img {
  float: left;
  width: 50%;
}
h1{
  clear: both;
}
 </style>

 

二、需要了解的問題

1、如何加載圖片?
2、如何判斷一個元素出現在視野中?

  • 如何加載圖片
    只需要把data-src中的地址放到src的里面就好了

代碼:

function loadImg($img){
//.attr(值)
//.attr(屬性名稱,值)
$img.attr('src', $img.attr('data-src')) //把data-src的值 賦值給src
$img.attr('data-isLoaded', 1) //已加載過的圖片做標記
}

 

結果如下:

地址更換.png
地址更換.png
  • 如何判斷一個元素出現在視野中?
    元素相對頂點的距離(文字) <= 窗口高度 + 滾動的距離

代碼:

function isShow($node){
return $node.offset().top <= $(window).height() + $(window).scrollTop()
}

 

如圖:

判斷一個元素出現在視野中.png
判斷一個元素出現在視野中.png
原理.png
原理.png

js:

start()
$(window).on('scroll', function(){
 start()
})

function start(){
  //.not('[data-isLoaded]')選中已加載的圖片不需要重新加載
 $('.container img').not('[data-isLoaded]').each(function(){
   var $node = $(this)
   if( isShow($node) ){
     loadImg($node)
   }
 })
 }

//判斷一個元素是不是出現在窗口(視野)
function isShow($node){
 return $node.offset().top <= $(window).height() + $(window).scrollTop()
 }
//加載圖片
 function loadImg($img){
//.attr(值)
//.attr(屬性名稱,值)
$img.attr('src', $img.attr('data-src')) //把data-src的值 賦值給src
$img.attr('data-isLoaded', 1)//已加載的圖片做標記
}

</script>

 


注:記得引用jQuery,元素浮動,必須清除。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM