JSFiddle - React, Tailwind, and code Playground
by tu genhua
HTML
<h2>js图片延迟加载demo</h2>
<img src="images/grey.gif" data-img ="http://m3.img.libdd.com/farm4/d/2014/0111/18/3256C6587D94BDF9E9908908CAB6C5FD_B500_900_500_375.jpeg" width="800" height="600" isload="false"><br/>
<img src="images/grey.gif" data-img ="http://m3.img.libdd.com/farm4/d/2014/0111/18/23CC5BDD3730A819E498B703A40DE5CF_B250_400_250_187.jpeg" width="800" height="600" isload="false"><br/>
<img src="images/grey.gif" data-img ="http://m3.img.libdd.com/farm4/d/2014/0111/18/33F69B61E6671E4F6623F0D1084C42A8_B250_400_250_187.jpeg" width="800" height="600" isload="false"><br/>
<img src="images/grey.gif" data-img ="http://m3.img.libdd.com/farm5/d/2014/0111/18/7B87F0A2209D234D2AB907C62946A7FE_B250_400_250_187.jpeg" width="800" height="600" isload="false"><br/>
<img src="images/grey.gif" data-img ="http://m2.img.libdd.com/farm5/d/2014/0111/18/C37405D8DBC8D1BF69A9C894C32FA4DA_B250_400_250_187.jpeg" width="800" height="600" isload="false"><br/>
<img src="images/grey.gif" data-img ="http://m1.img.libdd.com/farm5/d/2014/0111/18/1433297A651DA0329E866FD2D2776C7F_B250_400_250_187.jpeg" width="800" height="600" isload="false">
JavaScript
/**
* JS图片延迟加载
* @constructor {DataLazyLoad}
* @param {options} 对象传参
* @time 2014-1-10
*/
/*
* 延迟加载的原理:滚动时:待加载的资源相对于游览器顶端的距离 - threshold <= 可视区域相对于浏览器顶端的距离 true 就加载
* 否则的话 不加载
*/
function DataLazyLoad(options){
this.config = {
container : window, //容器 默认为window
threshold : 0, // 离多少像素渲染图片
event : 'scroll', // 默认为scroll(滚动)
effect : 'fadeIn', // 默认为show 也可以为fadeIn, slideDown 等 jQuery 自带的效果
effectspeed : 1000, // 时间
suffix : 'img', // img属性 默认以data-img 也可以自定义后缀
skip_invisible : true // 如果img标签为隐藏的 那么不强制加载
};
this.cache = {};
this.init(options);
}
DataLazyLoad.prototype = {
init: function(options){
this.config = $.extend(this.config, options || {});
var self = this,
_config = self.config,
_cache = self.cache;
// 滚动时(或者其他事件) 触发事件
$(_config.container).unbind(_config.event);
$(_config.container).bind(_config.event,function(){
self._update();
});
self._update();
},
/*
* 加载对应的图片
*/
_eachImg: function(item) {
var self = this,
_config = self.config,
_cache = self.cache;
if($(item).attr('isload') == 'false') {
var dataImg = $(item).attr('data-'+_config.suffix),
src = $(item).attr('src');
$(item).hide();
$(item).attr('src',dataImg);
$(item).attr('data-'+_config.suffix,'');
$(item)[_config.effect](_config.effectspeed);
$(item).attr('isload','true');
}
},
_update:function(){
var self = this,
_config = self.config,
_cache = self.cache;
if(_config.container === window) {
$('img').each(function(index,item){
// 如果图片隐藏的 那么不强制加载
if(_config.skip_invisible && !$('img').is(":visible")) {
return;
}
if (self._abovethetop(item) ||
self._leftofbegin(item)) {
// 什么都不处理
} else if (self._belowthefold(item) &&
self._belowthefold(item)) {
self._eachImg(item);
}
})
}else...