作用:保證頁面開啟的速度(3s之內如果首頁打不開就已經算是死亡頁面了)
原理:
1)、對於首屏內容中的圖片:首先給對應的區域一張默認圖片佔的位置(默認圖需要非常的小,一般可以維持在5kb以內),當首屏內容都加載完成後(或也可以給一個延遲的時間),我在開始加載真實的圖片
# 2)、對於其他螢幕中的圖片:也是給一張預設的圖片佔位,當滾動條滾動到對應區域的時候,我們再開始加載真實的圖片
# 擴展:數據的異步加載,開始只把前兩屏的數據加載綁定出來,後面的資料不進行處理,當頁面捲動到對應區域的時候,在重新請求資料綁定渲染資料
具體可以看一下下圖
#
首屏的延遲載入程式碼如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{ padding:0; margin:0; font-size:14px; } #banner{ margin:10px auto; width:300px; height:150px; border:1px solid green; background:url('img/default.gif') no-repeat center center;/*给当前的区域加一个默认图占位,告诉用户此处的图片正在加载中*/} #banner img{ display:none;/*在开始的时候IMG的SRC属性没有地址,这样的话在IE浏览器中会显示一张碎图,不美观,所以我们让其默认是隐藏的,当真实的图片加载完成后在显示*/width:100%; height:100%; }</style> </head> <body> <div id='banner'> <!--trueImg是当前标签的自定义属性,存储的是真实图片的地址--> <img src="" alt="" trueImg="img/jd.jpg"> </div> <script>var banner = document.getElementById('banner'),imgFir = banner.getElementsByTagName('img')[0] window.setTimeout(function(){// imgFir.src = imgFir.getAttribute('trueImg');// imgFir.style.display = "block"//以上处理还是不完整的:如果我们获取的真实图片的地址是错误的,赋值给IMG的SRC属性的时候,不仅控制台会报错,而且页面中还会出现碎图//获取图片的地址,验证地址的有效性,是有效的才赋值,不是有效的是不进行处理的// var oImg = document.createElement('img')var oImg = new Image;//创建一个临时的IMG标签oImg.src = imgFir.getAttribute('trueImg'); oImg.onload = function(){//当图片能够正常加载imgFir.src = this.src; imgFir.style.display = "block"; oImg = nullconsole.log('加载完成') } console.log('正在加载中...') },500)</script> </body> </html>
多螢幕單張圖片的延遲載入
#如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> *{ padding:0; margin:0; font-size:14px; } #banner{ margin:10px auto; width:300px; height:150px; border:1px solid green; background:url('img/default.gif') no-repeat center center;/*给当前的区域加一个默认图占位,告诉用户此处的图片正在加载中*/} #banner img{ display:none;/*在开始的时候IMG的SRC属性没有地址,这样的话在IE浏览器中会显示一张碎图,不美观,所以我们让其默认是隐藏的,当真实的图片加载完成后在显示*/width:100%; height:100%; }</style> </head> <body> <div id='banner'> <!--trueImg是当前标签的自定义属性,存储的是真实图片的地址--> <img src="" alt="" trueImg="img/jd.jpg"> </div> <script>var banner = document.getElementById('banner'),imgFir = banner.getElementsByTagName('img')[0] window.onscroll = function(){if(banner.isLoad){return; }var A = banner.offsetHeight+utils.offset(banner).top;var B = utils.win("clientHeight") + utils.win("scrollTop");if(A<B){//当条件成立,我们加载真实的图片,第一次加载完成后,我们在让页面滚动的过程中A<B一直成立,又重新执行下面的操作,导致了重复给一个容器中的图片进行加载var oImg = new Image; oImg.src = imgFir.getAttribute('trueImg'); oImg.onload = function(){ imgFir.src = this.src; imgFir.style.display = 'block'; oImg = null; } banner.isLoad = true;//设置一个自定义属性告诉浏览器我已经把图片加载完了(不管是否正常的加载,只要处理过一次以后都不需要处理了)} }</script> </body> </html>
以上是js延遲載入思想和首屏延遲載入講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!