java页面展示流式图片,javascript瀑布流式图片懒加载实例解析与优化

之前写过一版图片“懒加载”的文章,刚好周末在整理文件的时候,大概又看了一遍之前写的代码发现有很多可以优化的地方。

这篇文章主要就是结合上篇《javascript瀑布流式图片懒加载实例》再来看看图片“懒加载”的一些知识。

图片“懒加载”的主旨:

按照需要加载图片,也就是说需要显示的时候再加载图片显示,减少一次性加载的网络带宽开销。

先来看一段代码:

var conf = {

'loadfirst': true,

'loadimg': true

};

for (var item in conf) {

if (item in co) {

conf.item = co.item;

}

}

这里我主要是想实现,用户配置和默认配置的合并,这样写代码并不是很优雅,现在使用$.extend来做优化,代码如下:

_this.setting = {

"mobileHeight": 0, //扩展屏幕的高度,使第一屏加载个数可配置

"loadNum": 1 //滚动时,当前节点之后加载个数

};

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

这里重点介绍下,我新添加的两个参数mobileHeight,loadNum

mobileHeight 默认客户端的高度,值越大,首屏加载的图片越多;

loadNum 如果当前节点出现在屏幕上以后,可以一次性加载当前节点之后的若干个节点,可以跳高图片的加载速度;

之前我的代码是这样子写的:

_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));

}

});

}

};

按照可配置的想法来优化我现在的代码就是下面的这个样子的:

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()) {

//加载当前节点后的规定个数节点

for (var i = 0, len = _this.setting.loadNum; i < len; i++) {

_this.replaceImgSrc($(imgLazyList).eq(i));

}

return false;

}

});

}

更重要的一个方面就是按照编写插件的思想来组织现在的代码结构。代码如下:

;(function($) {

var LoadImgLazy = function(imgNode) {

var _this = this;

_this.imgNode = imgNode;

_this.setting = {

"mobileHeight": 0, //扩展屏幕的高度,使第一屏加载个数可配置

"loadNum": 1 //滚动时,当前节点之后加载个数

};

$.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()) {

//加载当前节点后的规定个数节点

for (var i = 0, len = _this.setting.loadNum; i < len; i++) {

_this.replaceImgSrc($(imgLazyList).eq(i));

}

return false;

}

});

},

replaceImgSrc: function(loadImgNode) {

//动态替换图片

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');

}

}

});

//移除已经运行过懒加载节点的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() {

//销毁方法区

$(window).off('scroll');

}

};

LoadImgLazy.init = function(imgNode) {

new this(imgNode);

};

window.LoadImgLazy = LoadImgLazy;

})(Zepto);

通过这篇文章希望大家对javascript瀑布流式图片懒加载有了更深的认识,学会优化方法,谢谢大家的阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值