1、什麼是懶加載技術?html
定義:這張圖片很懶,喜歡臨時抱佛腳,都到了出如今屏幕視線範圍內了才加載。不過懶人有懶福,這樣能夠在那種有大量圖片須要展現的網站上優化性能,減輕瀏覽器壓力,畢竟你要瀏覽器一次加載一兩百張圖片也很累瀏覽器
2、爲什要使用這個技術?服務器
3、怎麼實現?app
原理: 先將img標籤的src連接設爲同一張圖片(好比空白圖片),先把圖片地址存儲在一個臨時屬性上,而後將真正的圖片地址存儲在data-src中,當用瀏覽器的onscroll事件監聽到該圖片元素進入可視窗口時,將自定義屬性中的地址存儲到src屬性中,達到懶加載的效果。工具
判斷條件
window.innerHeight 能夠獲取到這個窗口的高度(不包括工具欄和滾動條)。getBoundingClientRect()方法用來獲取頁面中某個元素的左、上、右、下分別相對瀏覽器視窗的位置,返回的是一個矩形對象,包括四個屬性,分別是left 、top、right、bottom。分別表示元素各邊與頁面上邊和左邊的距離。
基本的判斷就是若是該圖片距離窗口上方的位置小於窗口的高度(也就是說該圖片已經進入了窗口),那麼就將該圖片的src屬性賦爲data-src找那個存的圖片路徑。
而後全局綁定scroll事件,在滾動頁面的時候,圖片進入到窗口後,500ms以後纔會顯示出圖片。性能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>懶加載</title> <style> * { margin: 0; padding: 0; } li { list-style: none; height: 600px; box-sizing: border-box; border: 1px solid black; } img { display: block; margin: 100px auto; } </style> </head> <body> <div id="box"> <ul> <li> <img data-src="./圖片懶加載/1.jpg" alt=""> </li> <li> <img data-src="./圖片懶加載/2.jpg" alt=""> </li> <li> <img data-src="./圖片懶加載/3.jpg" alt=""> </li> <li> <img data-src="./圖片懶加載/4.jpg" alt=""> </li> <li> <img data-src="./圖片懶加載/5.jpg" alt=""> </li> <li> <img data-src="./圖片懶加載/6.jpg" alt=""> </li> <li> <img data-src="./圖片懶加載/7.jpg" alt=""> </li> <li> <img data-src="./圖片懶加載/8.jpg" alt=""> </li> <li> <img data-src="./圖片懶加載/9.jpg" alt=""> </li> <li> <img data-src="./圖片懶加載/10.jpg" alt=""> </li> </ul> </div> </body> </html>
<script> function imgonload() { let img = document.querySelectorAll("img"); /*console.log(img);*/ for(let i=0; i<img.length; i++) { if(img[i].getBoundingClientRect().top < window.innerHeight) { //圖片一旦有src就會加載出來,因此圖片的路徑不會放在src中,而是一個自定義的屬性data-src中 img[i].src = img[i].dataset.src; } } } function scollImg(fn) { let timer = null; let context = this; return function () { clearTimeout(timer); timer = setTimeout(() => { fn.apply(context); }, 500) } } window.onload = imgonload; window.onscroll = scollImg(imgonload); </script> ————————————————