手机端图片缓加载js代码如下
(function(){
/**
* 功能:图片惰性加载
* @author haunghm
* @version 1.0.0
* @dependencies jquery 或者 zepto
*/
var lazyLoad = {
init: function() {
var that = this;
that.onerrorImgUrl = "./images/grey.png";//图片加载失败用什么图片替换
that.srcStore = "dataimg"; //图片真实地址存放的自定义属性
that.class = "lazy"; //惰性加载的图片需要添加的class
that.sensitivity = 50; //该值越小,惰性越强(加载越少)
minScroll = 5,
slowScrollTime = 200,
ios = navigator.appVersion.match(/(iPhone\sOS)\s([\d_]+)/),
isIos = ios && !0 || !1,
isoVersion = isIos && ios[2].split("_");
isoVersion = isoVersion && parseFloat(isoVersion.length > 1 ? isoVersion.splice(0, 2).join(".") : isoVersion[0], 10),
isIos = that.isPhone = isIos && isoVersion < 6;
if (isIos) {
var startSyAndTime,
setTimeOut;
$(window).on("touchstart",function() {
startSyAndTime = {
sy: window.scrollY,
time: Date.now()
},
setTimeOut && clearTimeout(setTimeOut)
}).on("touchend",function(e) {
if (e && e.changedTouches) {
var subtractionY = Math.abs(window.scrollY - startSyAndTime.sy);
if (subtractionY > minScroll) {
var subtractionTime = Date.now() - startSyAndTime.time;
setTimeOut = setTimeout(function() {
that.changeimg(),
startSyAndTime = {},
clearTimeout(setTimeOut),
setTimeOut = null
},
subtractionTime > slowScrollTime ? 0: 200)
}
} else {
that.changeimg();
}
}).on("touchcancel", function() {
setTimeOut && clearTimeout(setTimeOut),
startSyAndTime = {}
})
} else {
$(window).on("scroll", function() {
that.changeimg();
});
}
setTimeout(function() {
that.trigger();
},90);
},
trigger: function() {
var that = this;
eventType = that.isPhone && "touchend" || "scroll";
that.imglist = $('img.'+that.class+'');
$(window).trigger(eventType);
},
changeimg: function() {
function loadYesOrno(img) {
var windowPageYOffset = window.pageYOffset,
windowPageYOffsetAddHeight = windowPageYOffset + window.innerHeight,
imgOffsetTop = img.offset().top;
return imgOffsetTop >= windowPageYOffset && imgOffsetTop - that.sensitivity <= windowPageYOffsetAddHeight;
}
function loadImg(img, index) {
var imgUrl = img.attr(that.srcStore);
img.attr("src", imgUrl);
img[0].onload || (img[0].onload = function() {
$(this).removeClass(that.class).removeAttr(that.srcStore),
that.imglist[index] = null,
this.onerror = this.onload = null
},
img[0].onerror = function() {
this.src = that.onerrorImgUrl,
$(this).removeClass(that.class).removeAttr(that.srcStore),
that.imglist[index] = null,
this.onerror = this.onload = null
})
}
var that = this;
that.imglist.each(function(index, val) {
if (!val) return;
var img = $(val);
if (!loadYesOrno(img)) return;
if (!img.attr(that.srcStore)) return;
loadImg(img, index);
})
}
};
lazyLoad.init();
}());
使用方法:
<!DOCTYPE html> <html> <head> <title>图片惰性演示例子</title> </head> <body> <img class="lazy" dataimg="images/change01.jpg" src="./grey.png"> <img class="lazy" dataimg="images/change02.jpg" src="./grey.png"> <img class="lazy" dataimg="images/change03.jpg" src="./grey.png"> <img class="lazy" dataimg="images/change04.jpg" src="./grey.png"> <img class="lazy" dataimg="images/change05.jpg" src="./grey.png"> <img class="lazy" dataimg="images/change06.jpg" src="./grey.png"> </body> <script src="http://libs.baidu.com/zepto/1.0rc/zepto.min.js"></script> <script src="./lazyload.js"></script> </html>
评论