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

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

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

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

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

先來看一段代碼:

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

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

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

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

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

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

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

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

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

_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)在的代碼就是下面的這個樣子的:

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() {
   //滾動的時候加載圖片
   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()) {
     //加載當前節(jié)點后的規(guī)定個數(shù)節(jié)點
     for (var i = 0, len = _this.setting.loadNum; i < len; i++) {
      _this.replaceImgSrc($(imgLazyList).eq(i));
     }
     return false;
    }
   });
  }

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

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

  _this.setting = {
   "mobileHeight": 0, //擴展屏幕的高度,使第一屏加載個數(shù)可配置
   "loadNum": 1 //滾動時,當前節(jié)點之后加載個數(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() {
   //滾動的時候加載圖片
   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()) {
     //加載當前節(jié)點后的規(guī)定個數(shù)節(jié)點
     for (var i = 0, len = _this.setting.loadNum; i < len; i++) {
      _this.replaceImgSrc($(imgLazyList).eq(i));
     }
     return false;
    }
   });
  },
  replaceImgSrc: function(loadImgNode) {
   //動態(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)運行過懶加載節(jié)點的node-type 對性能提升
    $(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);

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    javascript 事件查詢綜合 推薦收藏

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

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

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

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

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

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

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

最新評論

韶山市| 马鞍山市| 丹寨县| 定陶县| 阳泉市| 年辖:市辖区| 海南省| 霍林郭勒市| 临漳县| 东方市| 巴楚县| 邵武市| 湖北省| 宁国市| 南安市| 昌乐县| 嵊州市| 襄垣县| 西乌| 湘潭县| 石台县| 赞皇县| 达尔| 子长县| 邛崃市| 南陵县| 涿鹿县| 镇原县| 揭西县| 平邑县| 崇仁县| 二连浩特市| 深泽县| 鹿邑县| 平舆县| 敖汉旗| 家居| 甘德县| 洪泽县| 崇文区| 册亨县|