亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

原生JS實現圖片懶加載之頁面性能優化

2024-05-06 16:50:18
字體:
來源:轉載
供稿:網友

在項目開發中,我們往往會遇到一個頁面需要加載很多圖片的情況。我們可以一次性加載全部的圖片,但是考慮到用戶有可能只瀏覽部分圖片。所以我們需要對圖片加載進行優化,只加載瀏覽器窗口內的圖片,當用戶滾動時,再加載更多的圖片。這種加載圖片的方式叫做圖片懶加載,又叫做按需加載或圖片的延時加載。這樣做的好處是:1.可以加快頁面首屏渲染的速度;2.節約用戶的流量。

一.實現思路

1.圖片img標簽自定義一個屬性data-src來存放真實的地址。

2.當滾動頁面時,檢查所有的img標簽,判斷是否出現在事業中,如果出現在視野中,繼續進行判斷,看齊是否被加載過了,如果沒有加載,那就進行加載。

判斷圖片元素是否處于瀏覽器視野中的示意圖(手繪):

JS,圖片懶加載,頁面性能優化

二.根據思路完成代碼如下:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>原生js實現圖片懶加載</title> <style> *{  margin: 0;  padding: 0;  box-sizing: border-box; } ul{  overflow: hidden;  list-style: none; } li{  float: left;  width: 50%;  height: 200px;  padding: 10px; } li img{  display: inline-block;  width: 100%;  height: 100%; } </style></head><body><div class="container"> <ul> <li><img src="http://cdn.jirengu.com/book.jirengu.com/img/1.jpg" <li><img src="" <li><img src="" <li><img src="" <li><img src="" <li><img src="" <li><img src="" <li><img src="" <li><img src="" <li><img src="" <li><img src="" <li><img src="" <li><img src="" <li><img src="" <li><img src="" <li><img src="" </ul></div><script> // window綁定滾動事件 window.addEventListener('scroll',function(){ // 遍歷所有的img標簽 Array.prototype.slice.apply(document.getElementsByTagName('li')).forEach((li)=>{  let img=li.getElementsByTagName('img')[0];  // 判斷當前img是否出現在了視野中  // 判斷當前img是否被加載過了  if(checkShow(img) && !isLoaded(img)){  loadImg(img);  } }) }); // 判斷img是否出現瀏覽器視野中 function checkShow(img) { let scrollTop=document.documentElement.scrollTop; // 頁面向上滾動的高度 let windowHeight=window.innerHeight; //瀏覽器自身高度 let offsetTop=img.offsetTop; //目標標簽相對于document的高度 return (offsetTop > scrollTop && offsetTop <(windowHeight + scrollTop)); } // 判斷是否已經加載過 function isLoaded(img) { return img.getAttribute('src')===img.getAttribute('data-src'); } // 加載圖片 function loadImg(img) { img.setAttribute('src',img.getAttribute('data-src')); }</script></body></html>

好了,在瀏覽器中運行一下,第一次進頁面如果不滾動滾輪的話什么也看不到,所以第一次進頁面需要調用checkShow(),處于視野中的圖片也加載出來。

在代碼最后加上:

// 第一次進頁面加載處于視野中的圖片 Array.prototype.slice.apply(document.getElementsByTagName('li')).forEach((li)=>{ let img=li.getElementsByTagName('img')[0]; // 判斷當前img是否出現在了視野中 // 判斷當前img是否被加載過了 if(checkShow(img) && !isLoaded(img)){  loadImg(img); } })

此時我們發現判斷加載視野中的圖片代碼存在重復,直接封裝成一個新的方法lazyRenderImg();

// window綁定滾動事件 window.addEventListener('scroll',function(){ // 遍歷所有的img標簽 lazyRenderImg(); });function lazyRenderImg(){ Array.prototype.slice.apply(document.getElementsByTagName('li')).forEach((li)=>{  let img=li.getElementsByTagName('img')[0];  // 判斷當前img是否出現在了視野中  // 判斷當前img是否被加載過了  if(checkShow(img) && !isLoaded(img)){  loadImg(img);  } }) } // 第一次進頁面加載處于視野中的圖片 lazyRenderImg();

三.性能優化

問題:window.scroll 方法頁面只要一滾動就會觸發里面的方法,對性能影響很大

解決方法:當頁面停止滾動的時候,再去執行頁面中的方法,類似與函數節流(throttle)

Tips:函數節流:等時間間隔執行函數, 讓一個函數不要執行得太頻繁,減少一些過快的調用來節流。

// window綁定滾動事件 let timer; window.addEventListener('scroll',function(){ console.log('scroll') // 遍歷所有的img標簽 if(timer){  clearTimeout(timer) } timer=setTimeout(()=>{  console.log('lazyRenderImg...');  lazyRenderImg(); },300);

通過打印的日志發現當滾動停止后才執行lazyRenderImg方法的,確實減少了不必要調用lazyRenderImg的次數。

JS,圖片懶加載,頁面性能優化

  以上所述是小編給大家介紹的原生JS實現圖片懶加載之頁面性能優化,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产毛片完整版| 久久久久久久国产| 久久99热这里只有精品国产| 亚洲老司机av| 国产一区二区三区三区在线观看| 久久成人综合视频| 日韩精品亚洲元码| 亚洲高清福利视频| 亚洲精品国产品国语在线| 成人h视频在线| 欧美性高潮在线| 国产精品国产三级国产专播精品人| 亚洲精品国产精品自产a区红杏吧| 欧美一级黄色网| 中文字幕av一区二区| 国产精品美女999| 98精品国产自产在线观看| 黄色一区二区在线观看| 疯狂欧美牲乱大交777| 欧美日韩成人网| 欧美电影第一页| 欧洲中文字幕国产精品| 92国产精品久久久久首页| 性色av一区二区三区红粉影视| 亚洲国产欧美日韩精品| www国产91| 国产欧美日韩91| 中文日韩电影网站| 欧美电影免费观看| 成人免费看黄网站| 亚洲欧美国产另类| 亚洲高清av在线| 久久精品夜夜夜夜夜久久| 国产日韩综合一区二区性色av| 国产婷婷97碰碰久久人人蜜臀| 欧美成人免费网| 国产性猛交xxxx免费看久久| 午夜精品久久久久久久男人的天堂| 日韩av男人的天堂| 久久亚洲国产精品| 亚洲男人7777| 亚洲欧美综合图区| 日韩av一区在线观看| 欧美夫妻性生活视频| 亚洲人成亚洲人成在线观看| 久久福利视频导航| 538国产精品一区二区免费视频| 欧美性感美女h网站在线观看免费| 中文字幕精品在线视频| 91精品久久久久久久久不口人| 久久免费成人精品视频| 欧美性猛交xxxx乱大交3| 91日本在线观看| 日本精品在线视频| 国产v综合v亚洲欧美久久| 日韩一区二区av| 欧美激情xxxxx| 亚洲国产天堂久久国产91| 欧美在线亚洲在线| 欧美最猛黑人xxxx黑人猛叫黄| 欧美精品久久久久久久久| 亚洲国产美女精品久久久久∴| 精品高清一区二区三区| 欧美在线视频a| 欧美激情视频一区二区三区不卡| 欧美高清电影在线看| 精品久久久久久中文字幕一区奶水| 成人在线视频网站| 久久久久久com| 亚洲国产美女精品久久久久∴| 国产精品国产亚洲伊人久久| 欧美电影在线观看高清| 伊人久久精品视频| 国产福利视频一区| 国产精品男人的天堂| 91av在线影院| 成人情趣片在线观看免费| 91精品国产综合久久久久久久久| 久久影院中文字幕| 中文在线不卡视频| 成人久久18免费网站图片| 日韩精品极品毛片系列视频| 久久网福利资源网站| 高跟丝袜欧美一区| 91精品国产综合久久男男| 亚洲日本中文字幕免费在线不卡| 精品久久久久久国产91| 中文字幕综合在线| 久久精品国产清自在天天线| 国产美女精品免费电影| 欧美激情在线有限公司| 91av国产在线| 国产成人aa精品一区在线播放| 97超碰国产精品女人人人爽| 亚洲一区免费网站| 国产日韩欧美电影在线观看| 亚洲色图在线观看| 国产精品av免费在线观看| 亚洲精品中文字| 69久久夜色精品国产69| 国产精品黄色影片导航在线观看| 91最新在线免费观看| 久久久久久欧美| 国语自产精品视频在线看抢先版图片| 777午夜精品福利在线观看| 国产精品一区二区av影院萌芽| 91精品久久久久久久久久| 在线看福利67194| 一本色道久久综合亚洲精品小说| 97国产真实伦对白精彩视频8| 国产精品欧美激情| 精品国产91久久久久久老师| 国产精品九九久久久久久久| 欧美孕妇与黑人孕交| 国产999视频| 亚洲一区二区三区毛片| 国产亚洲精品成人av久久ww| 97超碰国产精品女人人人爽| 久久久久久久久久av| 亚洲精品久久久久中文字幕欢迎你| 深夜福利亚洲导航| 国产精品嫩草视频| 欧美高清在线播放| 欧美黑人视频一区| 亚洲电影在线观看| 91精品视频在线免费观看| 91精品在线观看视频| 欧美成人三级视频网站| 亚洲视频综合网| 国产精品www色诱视频| 中文字幕亚洲一区二区三区五十路| 亚洲精品久久久一区二区三区| www.xxxx精品| 亚洲在线免费视频| 伊人伊成久久人综合网站| 欧美激情欧美狂野欧美精品| 日韩欧美亚洲一二三区| 在线播放国产一区二区三区| 91精品国产自产在线| 久久久久久久久久亚洲| 国产69久久精品成人| 曰本色欧美视频在线| 亚洲天堂av在线免费观看| 91精品91久久久久久| 岛国av一区二区在线在线观看| 日韩av在线免播放器| 色综合91久久精品中文字幕| 久久好看免费视频| 日本欧美一二三区| 日韩欧美中文字幕在线观看| 日韩欧美在线视频免费观看| 色偷偷偷综合中文字幕;dd| 欧美成人午夜剧场免费观看| 国产精品精品久久久久久| 亚洲欧美国产精品专区久久| 亚洲第一区中文字幕| 久久久久久久久久久免费精品| 亚洲第一精品自拍| 国产日韩中文字幕在线| 国产有码一区二区| 亚洲国产欧美在线成人app| 欧美激情一级精品国产| 中文字幕一精品亚洲无线一区| 热久久美女精品天天吊色|