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

javascript瀑布流式圖片懶加載實(shí)例解析與優(yōu)化

 更新時(shí)間:2016年02月23日 16:47:08   作者:zhiqiang21  
這篇文章主要針對(duì)javascript瀑布流式圖片懶加載實(shí)例進(jìn)行解析與優(yōu)化,感興趣的小伙伴們可以參考一下

之前寫過一版圖片“懶加載”的文章,剛好周末在整理文件的時(shí)候,大概又看了一遍之前寫的代碼發(fā)現(xiàn)有很多可以優(yōu)化的地方。
這篇文章主要就是結(jié)合上篇《javascript瀑布流式圖片懶加載實(shí)例》再來看看圖片“懶加載”的一些知識(shí)。

圖片“懶加載”的主旨:
按照需要加載圖片,也就是說需要顯示的時(shí)候再加載圖片顯示,減少一次性加載的網(wǎng)絡(luò)帶寬開銷。

先來看一段代碼:

 var conf = {
   'loadfirst': true,
   'loadimg': true
  };

  for (var item in conf) {
   if (item in co) {
    conf.item = co.item;
   }
  }

這里我主要是想實(shí)現(xiàn),用戶配置和默認(rèn)配置的合并,這樣寫代碼并不是很優(yōu)雅,現(xiàn)在使用$.extend來做優(yōu)化,代碼如下:

_this.setting = {
   "mobileHeight": 0, //擴(kuò)展屏幕的高度,使第一屏加載個(gè)數(shù)可配置
   "loadNum": 1 //滾動(dòng)時(shí),當(dāng)前節(jié)點(diǎn)之后加載個(gè)數(shù)
  };

  $.extend(_this.setting, _this.getSetting());

這里重點(diǎn)介紹下,我新添加的兩個(gè)參數(shù)mobileHeight,loadNum

mobileHeight 默認(rèn)客戶端的高度,值越大,首屏加載的圖片越多;

loadNum 如果當(dāng)前節(jié)點(diǎn)出現(xiàn)在屏幕上以后,可以一次性加載當(dāng)前節(jié)點(diǎn)之后的若干個(gè)節(jié)點(diǎn),可以跳高圖片的加載速度;

之前我的代碼是這樣子寫的:

_this.loadFirstScreen = function() {
   if (conf.loadfirst) {
    lazyNode.each(function(i) {
     currentNodeTop = $(this).offset().top;
     //這里的800就是上面提到的mobileHeight
     if (currentNodeTop < mobileHeight + 800) {
      _this.replaceImgSrc($(this));
     }
    });
   }
  };

_this.loadImg = function() {
   if (conf.loadimg) {
    $(window).on('scroll', function() {
     var imgLazyList = $('[node-type=imglazy]', node);
     //這里的5就是上面提到的loadNum
     for (var i = 0; i < 5; i++) {
      _this.replaceImgSrc(imgLazyList.eq(i));
     }
    });
   }
  };

按照可配置的想法來優(yōu)化我現(xiàn)在的代碼就是下面的這個(gè)樣子的:

loadFirstSrceen: function() {
   // 加載首屏
   var _this = this;
   var currentNodeTop;
   var imgNodeList = _this.imgNode;
   $(imgNodeList).each(function() {
    currentNodeTop = $(this).offset().top;
    if (currentNodeTop < _this.mobileHeight() + _this.setting.mobileHeight) {
     _this.replaceImgSrc($(this));
    }
   });
  },
  scrollLoadImg: function() {
   //滾動(dòng)的時(shí)候加載圖片
   var _this = this;
   var currentNodeTop;
   var scrollTop = $('body').scrollTop();
   var imgLazyList = $('[node-type=imglazy]');

   $(imgLazyList).each(function() {
    currentNodeTop = $(this).offset().top;
    if (currentNodeTop - scrollTop < _this.mobileHeight()) {
     //加載當(dāng)前節(jié)點(diǎn)后的規(guī)定個(gè)數(shù)節(jié)點(diǎn)
     for (var i = 0, len = _this.setting.loadNum; i < len; i++) {
      _this.replaceImgSrc($(imgLazyList).eq(i));
     }
     return false;
    }
   });
  }

更重要的一個(gè)方面就是按照編寫插件的思想來組織現(xiàn)在的代碼結(jié)構(gòu)。代碼如下:

;(function($) {
 var LoadImgLazy = function(imgNode) {
  var _this = this;
  _this.imgNode = imgNode;

  _this.setting = {
   "mobileHeight": 0, //擴(kuò)展屏幕的高度,使第一屏加載個(gè)數(shù)可配置
   "loadNum": 1 //滾動(dòng)時(shí),當(dāng)前節(jié)點(diǎn)之后加載個(gè)數(shù)
  };

  $.extend(_this.setting, _this.getSetting());

  _this.loadFirstSrceen();
  $(window).on('scroll', function() {
   _this.scrollLoadImg();
  });


 };

 LoadImgLazy.prototype = {
  mobileHeight: function() {
   return $(window).height();
  },
  loadFirstSrceen: function() {
   // 加載首屏
   var _this = this;
   var currentNodeTop;
   var imgNodeList = _this.imgNode;
   $(imgNodeList).each(function() {
    currentNodeTop = $(this).offset().top;
    if (currentNodeTop < _this.mobileHeight() + _this.setting.mobileHeight) {
     _this.replaceImgSrc($(this));
    }
   });
  },
  scrollLoadImg: function() {
   //滾動(dòng)的時(shí)候加載圖片
   var _this = this;
   var currentNodeTop;
   var scrollTop = $('body').scrollTop();
   var imgLazyList = $('[node-type=imglazy]');

   $(imgLazyList).each(function() {
    currentNodeTop = $(this).offset().top;
    if (currentNodeTop - scrollTop < _this.mobileHeight()) {
     //加載當(dāng)前節(jié)點(diǎn)后的規(guī)定個(gè)數(shù)節(jié)點(diǎn)
     for (var i = 0, len = _this.setting.loadNum; i < len; i++) {
      _this.replaceImgSrc($(imgLazyList).eq(i));
     }
     return false;
    }
   });
  },
  replaceImgSrc: function(loadImgNode) {
   //動(dòng)態(tài)替換圖片
   var srcValue;
   var imgDataSrc;
   var _this = this;
   var imgUrlList = $(loadImgNode).find('img[data-lazysrc]');

   if (imgUrlList.length > 0) {
    imgUrlList.each(function(i) {
     imgDataSrc = $(this).attr('data-lazysrc');
     srcValue = $(this).attr('src');
     if (srcValue === '#') {
      if (imgDataSrc) {
       $(this).attr('src', imgDataSrc);
       $(this).removeAttr('data-lazysrc');
      }
     }
    });
    //移除已經(jīng)運(yùn)行過懶加載節(jié)點(diǎn)的node-type 對(duì)性能提升
    $(loadImgNode).removeAttr('node-type');
   }
  },
  getSetting: function() {
   var userSetting = $('[lazy-setting]').attr('lazy-setting');
   if (userSetting && userSetting !== '') {
    return $.parseJSON(userSetting);
   } else {
    return {};
   }
  },
  destory: function() {
   //銷毀方法區(qū)
   $(window).off('scroll');
  }
 };

 LoadImgLazy.init = function(imgNode) {
  new this(imgNode);
 };

 window.LoadImgLazy = LoadImgLazy;

})(Zepto);

通過這篇文章希望大家對(duì)javascript瀑布流式圖片懶加載有了更深的認(rèn)識(shí),學(xué)會(huì)優(yōu)化方法,謝謝大家的閱讀。

相關(guān)文章

  • JavaScript實(shí)現(xiàn)左右點(diǎn)擊切換圖片

    JavaScript實(shí)現(xiàn)左右點(diǎn)擊切換圖片

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡易左右點(diǎn)擊切換圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 前端TypeScript時(shí)間格式化函數(shù)舉例詳解

    前端TypeScript時(shí)間格式化函數(shù)舉例詳解

    這篇文章主要介紹了前端TypeScript時(shí)間格式化函數(shù)的相關(guān)資料,包括日期格式化formatDate、獲取周數(shù)getWeek、相對(duì)時(shí)間格式化formatPast、時(shí)間問候語formatAxis以及日期時(shí)間格式化parseTime和parseDate,每個(gè)方法都有詳細(xì)的參數(shù)說明和示例,需要的朋友可以參考下
    2025-02-02
  • 微信小程序登錄與注冊(cè)功能的實(shí)現(xiàn)詳解

    微信小程序登錄與注冊(cè)功能的實(shí)現(xiàn)詳解

    在小程序的開發(fā)中,可能起點(diǎn)就是用戶的登錄與注冊(cè)了。和粉絲的互動(dòng)過程中發(fā)現(xiàn),對(duì)于用戶的登錄注冊(cè)還是沒有徹底掌握。我們本篇就來分析一下登錄與注冊(cè)如何實(shí)現(xiàn)
    2022-08-08
  • 網(wǎng)頁禁用右鍵菜單和鼠標(biāo)拖動(dòng)選擇方法小結(jié)

    網(wǎng)頁禁用右鍵菜單和鼠標(biāo)拖動(dòng)選擇方法小結(jié)

    本文主要給大家總結(jié)了一下在網(wǎng)頁中禁用鼠標(biāo)右鍵和鼠標(biāo)拖動(dòng)選擇的幾種常用的方法,十分的實(shí)用,有需要的小伙伴參考下。
    2015-02-02
  • JavaScript 事件冒泡簡介及應(yīng)用

    JavaScript 事件冒泡簡介及應(yīng)用

    這篇文章有助于大家認(rèn)識(shí)事件冒泡的一些知識(shí)。
    2010-01-01
  • 詳解ES9的新特性之異步遍歷Async iteration

    詳解ES9的新特性之異步遍歷Async iteration

    在ES6中,引入了同步iteration的概念,隨著ES8中的Async操作符的引用,是不是可以在一異步操作中進(jìn)行遍歷操作呢?今天要給大家講一講ES9中的異步遍歷的新特性Async iteration。
    2021-06-06
  • javascript 事件查詢綜合 推薦收藏

    javascript 事件查詢綜合 推薦收藏

    javascript 事件查詢綜合,需要的朋友可以參考下。
    2010-03-03
  • JavaScript異步操作的幾種常見處理方法實(shí)例總結(jié)

    JavaScript異步操作的幾種常見處理方法實(shí)例總結(jié)

    這篇文章主要介紹了JavaScript異步操作的幾種常見處理方法,結(jié)合實(shí)例形式總結(jié)分析了JavaScript常見的異步操作處理方法相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • 微信小程序 this.triggerEvent()的具體使用

    微信小程序 this.triggerEvent()的具體使用

    這篇文章主要介紹了微信小程序 this.triggerEvent()的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • javascript實(shí)現(xiàn)完美拖拽效果

    javascript實(shí)現(xiàn)完美拖拽效果

    javascript實(shí)現(xiàn)的拖拽效果,可以把屏幕上的圖片拖動(dòng)到任意地方,效果平滑,點(diǎn)擊圖片還可以從側(cè)邊展開圖片的詳細(xì)信息,非常好的相冊(cè)效果
    2015-05-05

最新評(píng)論

澄城县| 黎城县| 进贤县| 勃利县| 天峨县| 崇文区| 榕江县| 荥经县| 平度市| 永春县| 汝州市| 湖州市| 奉节县| 灵川县| 孝义市| 南溪县| 永安市| 南宫市| 宜宾市| 太康县| 樟树市| 庆安县| 彭阳县| 开平市| 米泉市| 南通市| 离岛区| 旌德县| 塔城市| 新绛县| 龙泉市| 赤水市| 墨竹工卡县| 文化| 远安县| 湘西| 大足县| 若尔盖县| 岳阳市| 同德县| 宣化县|