真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JS如何實現(xiàn)非首屏圖片延遲加載

這篇文章將為大家詳細講解有關JS如何實現(xiàn)非首屏圖片延遲加載,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)專注于龍馬潭企業(yè)網(wǎng)站建設,響應式網(wǎng)站,商城建設。龍馬潭網(wǎng)站建設公司,為龍馬潭等地區(qū)提供建站服務。全流程按需定制設計,專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務

js的作用是什么

1、能夠嵌入動態(tài)文本于HTML頁面。2、對瀏覽器事件做出響應。3、讀寫HTML元素。4、在數(shù)據(jù)被提交到服務器之前驗證數(shù)據(jù)。5、檢測訪客的瀏覽器信息。6、控制cookies,包括創(chuàng)建和修改等。7、基于Node.js技術進行服務器端編程。

目標

減少資源加載可以明顯的優(yōu)化頁面加載的速度,所以可以減少頁面載入時立即下載的圖片的數(shù)量,以提高頁面加載速度,其他的圖片在需要的時候再進行加載。

思路

想要實現(xiàn)以上的目標,有幾個地方需要思考。

1、如何判斷哪些圖片需要立即加載,哪些可以晚些再加載?

2、如何控制圖片在指定的時候加載?

對于第一個問題,頁面打開就會被用戶看到的圖片肯定需要立即加載,其他的可以延后。即在視窗中的圖片需要立即加載。那么如何判斷圖片是否在視窗內(nèi)呢?getBoundingClientRect可以返回元素的大小及其相對于視口的位置(詳細說明)

JS如何實現(xiàn)非首屏圖片延遲加載

可以通過圖中top和right的值判斷圖片是否在視窗中。

對于第二個問題,先不給img指定src,而是將圖片鏈接地址存放再元素的data-src屬性(自定義)中,需要加載的時候再賦值給src,才會開始下載圖片。

實現(xiàn)

思路有了,我們開始實現(xiàn)。用以下HTML進行測試

 
 

圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

   

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

   

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

   

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

   

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

   

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

測試性配文,測試圖片懶加載

 

html中鏈接都來自百度圖片,可在network中觀察是否加載,這里忽略樣式。按照之前的思路,有以下代碼

//所有的圖片
 var imgs = document.querySelectorAll('.lazy-img');
 //首屏圖片加載
 lazyLoad(imgs)
 //剩余圖片加載---監(jiān)聽滾動事件
 window.addEventListener('scroll',function(){
 //滾動事件觸發(fā)太頻繁了,所以加上節(jié)流
 throttle(lazyLoad(imgs),200,500)
 })
 }

下面就是如何實現(xiàn)lazyLoad

function lazyLoad(imgs,offset){
 offset = offset || 100;
 if (!imgs || imgs.length < 1) {
 console.log('imgs為空');
 return ;
 }
 [].slice.call(imgs).forEach(function(element,index){
 //元素的DomRect
 var rect = element.getBoundingClientRect()
 //出現(xiàn)在視窗中
 if (rect.top <= window.innerHeight + offset && rect.right > 0) {
 element.setAttribute('src',element.getAttribute('data-src'))
 }
 })
}

通過window.innerHeight獲取到視窗的高度,當元素距離視窗上邊沿為offset時,加載圖片;其中offset為指定的偏移距離。

節(jié)流函數(shù)如下

function throttle (fn, delay, atleast) {
 let timer = null
 let startTime = new Date()

 return function () {
 let context = this
 let args = arguments
 let curTime = new Date()

 clearTimeout(timer)
 if (curTime - startTime >= atleast) {
 fn.apply(context, args) // apply 指定函數(shù)指向的 上下文(this) 和 參數(shù)列表
 startTime = curTime
 } else {
 timer = setTimeout(function () {
 fn.apply(context, args)
 startTime = curTime
 }, delay)
 }
 }
 }

效果

頁面載入完成,只加載了一張圖片

JS如何實現(xiàn)非首屏圖片延遲加載

向下滾動到指定位置,才會依次加載后續(xù)圖片

JS如何實現(xiàn)非首屏圖片延遲加載

關于“JS如何實現(xiàn)非首屏圖片延遲加載”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。


網(wǎng)站名稱:JS如何實現(xiàn)非首屏圖片延遲加載
鏈接URL:http://weahome.cn/article/jpghjg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部