圖片懶加載又稱圖片延時加載、惰性加載,即在用戶需要使用圖片的時候加載,這樣可以減少請求,節省頻寬,提高頁面加載速度,相對的,也能減少伺服器壓力,下面通過本文跟大家分享圖片懶載入lazyload的實作方法,有興趣的朋友一起看看吧
#定義
圖片懶載入又稱圖片延時加載、惰性加載,即在用戶需要使用圖片的時候加載,這樣可以減少請求,節省頻寬,提高頁面加載速度,相對的,也能減少伺服器壓力。
惰性載入是程式人性化的一種體現,提高用戶體驗,防止一次性加載大量數據,而是根據用戶需求進行資源的請求。
實作
懶載入的難度在於確定某張圖片是否是使用者需要的資源,在瀏覽器中,使用者需要的是視覺區內的資源,因此我們只需要判斷圖片是否已經呈現在可視區內,當圖片呈現在可視區內時,獲取圖片的真實地址並賦給該圖片即可(圖片寬高需要指定,可以利用padding處理)。
判斷是否存在於視覺區
瀏覽器視窗高度
待載入資源距離視窗頂端位置
通過以上兩點即可判斷圖片是否位於可視區內。
var nodes = document.querySelectorAll('img[src]'), elem = nodes[0], rect = elem.getBoundingClientRect(), vpHeight = document.documentElement.clientHeight; if(rect.top < vpHeight && rect.bottom>=0) { console.log('show') }
之後取得圖片的真實位址
<img src="loading.gif" alt="" src="1.gif"> ... <script data-filtered="filtered"> var src = elem.dataset.src; </script>
把真實位址賦給圖片
var img = new Image(); img.onload = function(){ elem.src = img.src; } img.src = src;
完整程式碼
var scrollElement = document.querySelector('.page'), viewH = document.documentElement.clientHeight; function lazyload(){ var nodes = document.querySelectorAll('img[src]'); Array.prototype.forEach.call(nodes,function(item,index){ var rect; if(item.dataset.src==='') return; rect = item.getBoundingClientRect(); if(rect.bottom>=0 && rect.top < viewH){ (function(item){ var img = new Image(); img.onload = function(){ item.src = img.src; } img.src = item.dataset.src item.dataset.src = '' })(item) } }) } lazyload(); scrollElement.addEventListener('scroll',throttle(lazyload,500,1000)); function throttle(fun, delay, time) { var timeout, startTime = new Date(); return function() { var context = this, args = arguments, curTime = new Date(); clearTimeout(timeout); if (curTime - startTime >= time) { fun.apply(context, args); startTime = curTime; } else { timeout = setTimeout(fun, delay); } }; };
以上是JavaScript實作圖片的懶載入方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!