最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript實(shí)現(xiàn)圖片預(yù)加載和懶加載

 更新時(shí)間:2021年03月14日 07:05:08   作者:啊a阿花  
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)圖片預(yù)加載和懶加載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了javascript實(shí)現(xiàn)圖片預(yù)加載和懶加載的具體代碼,供大家參考,具體內(nèi)容如下

預(yù)加載

預(yù)加載是預(yù)先加載好后面需要用到的資源, 后面使用的時(shí)候直接去緩存里取。舉個(gè)栗子, 比如一個(gè)網(wǎng)站的開(kāi)場(chǎng)動(dòng)畫(huà), 這些動(dòng)畫(huà)是由很多圖片組成的, 假如不預(yù)先加載好, 那就會(huì)造成動(dòng)畫(huà)不流暢產(chǎn)生閃動(dòng)白屏。圖片是提高用戶體驗(yàn)的一個(gè)很好方法。圖片預(yù)先加載到瀏覽器中,保證了圖片快速、無(wú)縫地發(fā)布,使用戶在瀏覽你網(wǎng)站內(nèi)容時(shí)獲得更好的用戶體驗(yàn)。

//這里我把圖片數(shù)量寫(xiě)死了,而且對(duì)圖片名也有要求必須是阿拉伯?dāng)?shù)字后綴為jpg
//下面注釋還會(huì)介紹另一種方法,兩者選一個(gè)就行,當(dāng)然也可以把你的方法留在評(píng)論區(qū)共同學(xué)習(xí)
function preload() {
  for(var i=1;i<13;i++){
    var img=[];
    img[i]=new Image();//創(chuàng)建一個(gè)img對(duì)象
    img[i].src="img/"+i+".jpg"
  }
}
/*function preload() {
    img1=new Image();//創(chuàng)建一個(gè)img對(duì)象
    img1.src="xxx/xxx/xxx.jpg"http://圖片地址
    img2=new Image();
    img2.src="xxx/xxx/xxx.jpg"
    img3=new Image();
    img3.src="xxx/xxx/xxx.jpg"
    img4=new Image();
    img4.src="xxx/xxx/xxx.jpg"
    ......
  }
}*/

// 定義了一個(gè)函數(shù),帶一個(gè)參數(shù)fun
function addLoadEvent(fun) {
  // 把已經(jīng)加載完成的函數(shù)賦值給oldnload變量
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = fun;
  } else {
    window.onload = function() {
      // 這里執(zhí)行了剛才賦值變量的函數(shù)
      oldonload();
      // 這里是執(zhí)行了傳進(jìn)來(lái)的func參數(shù)
      fun();
    }
  }
}
addLoadEvent(preload());
/*
 oldonload是自己定義的變量,并給他賦值了onload事件,onload 事件會(huì)在頁(yè)面或圖像加載完成后立即發(fā)生。
 onload是在頁(yè)面和圖像加載后執(zhí)行的事件,但在實(shí)際使用中若多次給onload賦值,則onload會(huì)被后復(fù)制的方法給覆蓋,也就意味著onload只會(huì)執(zhí)行最后賦值的方法。
 fun()是傳入的參數(shù),此處fun()就是preload()。
這段代碼表達(dá)的含義就是:
  如果(typeof window.onload != 'function')也就是說(shuō)window.onload還沒(méi)有被賦值,就直接把它賦值為fun。
  否則,說(shuō)明有程序先對(duì)其賦值了,那么在頁(yè)面加載完成之后,應(yīng)該先執(zhí)行現(xiàn)有函數(shù)再執(zhí)行自己的新的fun。
  即,此段代碼保證了onload中原有加載的方法執(zhí)行(且先執(zhí)行),防止fun方法執(zhí)行(圖片預(yù)加載)時(shí)將其覆蓋。
*/

這里可以看到圖片已經(jīng)經(jīng)加載出來(lái)了

懶加載

可以有效避免同一時(shí)間瀏覽器需要加載過(guò)多的圖片,同時(shí)開(kāi)啟過(guò)多的http請(qǐng)求,導(dǎo)致網(wǎng)頁(yè)加載速度變慢。

/*
先將照片路徑存放在一個(gè)自定義屬性中,src中存放一個(gè)正在加載的gif,等圖片到了顯示區(qū)域時(shí)再用js將自定義屬性替換到src里,圖片顯示出來(lái)。
將所有需要按需加載的圖片獲取到一個(gè)集合,滾動(dòng)滾動(dòng)條的時(shí)候判斷哪些圖片出現(xiàn)在了可視區(qū)域內(nèi),出現(xiàn)了就執(zhí)行一個(gè)加載的操作。
加載完成后就將這個(gè)圖片移出集合或者數(shù)組中去,最后數(shù)組內(nèi)需要加載的圖片就會(huì)越來(lái)越少。
*/
<div>
  <img src="img/lode.img" data-src="img/1.img" class="lazylode">
  <img src="img/lode.img" data-src="img/2.img" class="lazylode">
  <img src="img/lode.img" data-src="img/3.img" class="lazylode">
  <img src="img/lode.img" data-src="img/4.img" class="lazylode">
  <img src="img/lode.img" data-src="img/5.img" class="lazylode">
  <img src="img/lode.img" data-src="img/6.img" class="lazylode">
  <img src="img/lode.img" data-src="img/7.img" class="lazylode">
  <img src="img/lode.img" data-src="img/8.img" class="lazylode">
</div>
<script>
 var lazylode=document.querySelectorAll('.lazylode');
//獲取的是類數(shù)組對(duì)象,只有item()方法和length屬性沒(méi)有數(shù)組對(duì)象的方法
var imgArr=Array.prototype.slice.call(lazylode);
//將類數(shù)組轉(zhuǎn)化為數(shù)組
lazylodeImg();
//要執(zhí)行的懶加載方法,一開(kāi)始應(yīng)該先執(zhí)行一次懶加載,讓顯示區(qū)域內(nèi)的圖片加載出來(lái)
var timer;
window.addEventListener('scroll',function(){
  clearTimeout(timer);//節(jié)流
  timer=setTimeout(function(){
    lazylodeImg();//屏幕滾動(dòng)執(zhí)行懶加載
  },100);
},false)
function lazylodeImg(){
  for(var i=0;i<imgArr.length;i++){
    if(isVisibleArea(imgArr[i])){//判斷是否在可視區(qū)域內(nèi)
      imgArr[i].src=imgArr[i].getAttribute('data-src');
      //修改src為自定義的屬性
      imgArr.splice(i,1);//將數(shù)組中已加載的圖片移除數(shù)組
      i--;
      //因?yàn)閺臄?shù)組中刪除了下標(biāo)為1的數(shù),那么原來(lái)下標(biāo)為2的數(shù)就進(jìn)位為1了
    }
  }
}
function isVisibleArea(el){
  var rect=el.getBoundingClientRect();
  //獲取元素距離可視區(qū)域的top,left等值
  return rect.bottom>0 && rect.top<window.innerHeight && rect.right>0 && rect.left<window.innerHeight;
  //都為真才會(huì)返回true
}
</script>

不光是圖片,js,css文件等都可以按需加載,創(chuàng)建一個(gè)script或者link標(biāo)簽,讓后在里面添加要呈現(xiàn)的效果,添加到body或者h(yuǎn)eader里面,執(zhí)行完滾動(dòng)事件后js或者css文件已經(jīng)加載完成,移除屏幕滾動(dòng)事件。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript編制留言簿程序代碼

    JavaScript編制留言簿程序代碼

    也許你有一個(gè)很酷的主頁(yè),很希望與人分享。同時(shí),你希望訪問(wèn)你主頁(yè)的人能對(duì)你的主頁(yè)提供一些意見(jiàn)和建議,或者你對(duì)某個(gè)主題感興趣,而希望客人也許能給你一幫助,這就要用到留言簿。留言簿使得你能與每一個(gè)訪問(wèn)你主頁(yè)的人交換信息。
    2008-09-09
  • 兩個(gè)JavaScript jsFiddle JSBin在線調(diào)試器

    兩個(gè)JavaScript jsFiddle JSBin在線調(diào)試器

    這兩個(gè)工具都是剛誕生不久,都還在不斷完善中,雖然目前jsFiddle要優(yōu)于JS Bin,但是我還是更看好后者
    2010-03-03
  • JavaScript自定義日歷效果

    JavaScript自定義日歷效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript自定義日歷效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 通過(guò)js動(dòng)態(tài)創(chuàng)建標(biāo)簽,并設(shè)置屬性方法

    通過(guò)js動(dòng)態(tài)創(chuàng)建標(biāo)簽,并設(shè)置屬性方法

    下面小編就為大家分享一篇通過(guò)js動(dòng)態(tài)創(chuàng)建標(biāo)簽,并設(shè)置屬性方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • javascript刪除html標(biāo)簽函數(shù)cIsHTML

    javascript刪除html標(biāo)簽函數(shù)cIsHTML

    這篇文章主要介紹了javascript刪除html標(biāo)簽函數(shù)cIsHTML,需要的朋友可以參考下
    2017-01-01
  • 微信小程序picker組件關(guān)于objectArray數(shù)據(jù)類型的綁定方法

    微信小程序picker組件關(guān)于objectArray數(shù)據(jù)類型的綁定方法

    這篇文章主要介紹了微信小程序picker組件關(guān)于objectArray數(shù)據(jù)類型的綁定方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • 簡(jiǎn)潔短小的 JavaScript IE 瀏覽器判定代碼

    簡(jiǎn)潔短小的 JavaScript IE 瀏覽器判定代碼

    IE瀏覽器不管是什么版本,總是跟Web標(biāo)準(zhǔn)有些不太兼容。對(duì)于代碼工作者來(lái)說(shuō),自然是苦不堪言,為了考慮IE的兼容問(wèn)題,不管是寫(xiě) CSS 還是 JS,往往都要對(duì) IE 特別對(duì)待,這就少不了做些判斷。本文不討論如何區(qū)分 IE 的樣式,僅是 JS 判定 IE 瀏覽器。
    2010-03-03
  • 淺析JavaScript中的隱式類型轉(zhuǎn)換

    淺析JavaScript中的隱式類型轉(zhuǎn)換

    這篇文章主要是對(duì)JavaScript中的隱式類型轉(zhuǎn)換進(jìn)行了詳細(xì)分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-12-12
  • js實(shí)現(xiàn)點(diǎn)擊切換TAB標(biāo)簽實(shí)例

    js實(shí)現(xiàn)點(diǎn)擊切換TAB標(biāo)簽實(shí)例

    這篇文章主要介紹了js實(shí)現(xiàn)點(diǎn)擊切換TAB標(biāo)簽的方法,涉及javascript鼠標(biāo)點(diǎn)擊事件及頁(yè)面元素的遍歷技巧,需要的朋友可以參考下
    2015-08-08
  • JavaScript通過(guò)this變量快速找出用戶選中radio按鈕的方法

    JavaScript通過(guò)this變量快速找出用戶選中radio按鈕的方法

    這篇文章主要介紹了JavaScript通過(guò)this變量快速找出用戶選中radio按鈕的方法,涉及javascript中this變量的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03

最新評(píng)論

芮城县| 新宁县| 弋阳县| 大余县| 清水县| 吉木萨尔县| 宁强县| 阳谷县| 淄博市| 那曲县| 灯塔市| 景德镇市| 水富县| 吉隆县| 余姚市| 广元市| 高青县| 五大连池市| 双桥区| 无棣县| 松滋市| 垦利县| 棋牌| 博湖县| 涡阳县| 格尔木市| 榆树市| 泸溪县| 博客| 治县。| 麻栗坡县| 上杭县| 白水县| 富裕县| 石首市| 乌鲁木齐县| 麻江县| 富源县| 永平县| 司法| 西贡区|