国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

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

2024-05-06 16:29:04
字體:
供稿:網(wǎng)友
這篇文章主要針對javascript瀑布流式圖片懶加載實例進行解析與優(yōu)化,感興趣的小伙伴們可以參考一下
 

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

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

先來看一段代碼:

 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é)構。代碼如下:

;(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瀑布流式圖片懶加載有了更深的認識,學會優(yōu)化方法,謝謝大家的閱讀。



注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 清新县| 黄梅县| 法库县| 多伦县| 疏附县| 司法| 子长县| 乐东| 枞阳县| 通渭县| 错那县| 汝州市| 张北县| 木兰县| 喀喇| 和田县| 崇义县| 肇庆市| 嘉峪关市| 松阳县| 巴林左旗| 通化县| 彩票| 方城县| 木兰县| 基隆市| 工布江达县| 华亭县| 垫江县| 东阳市| 拉萨市| 应用必备| 双峰县| 垫江县| 南溪县| 雷州市| 阿荣旗| 筠连县| 体育| 招远市| 新竹市|