Skip to content

Commit 65793c9

Browse files
committed
init commit
1 parent ea73e6d commit 65793c9

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed

src/lazyload.js

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
"use strict";
2+
var Lazyload = function(elements,options){
3+
var that = this;
4+
var settings = {
5+
threshold : 0 , // 临界值
6+
event : 'scroll' , // 事件类型
7+
container : window, // 容器
8+
data_attribute : 'original', // 标记
9+
apper : null , // 更新图片时的回调函数
10+
placeholder : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC'
11+
}
12+
13+
for(var item in options){
14+
settings[item] = options[item];
15+
}
16+
17+
for(var i = 0 ; i < elements.length ; i++){
18+
var src = elements[i].getAttribute('src');
19+
if(!src || src == ''){
20+
elements[i].src = settings.placeholder;
21+
}
22+
that.update(settings,elements[i]);
23+
}
24+
25+
settings.container.onscroll = function(){
26+
for(var i = 0 ; i < elements.length ; i++){
27+
that.update(settings,elements[i]);
28+
}
29+
}
30+
}
31+
32+
33+
Lazyload.prototype = {
34+
// 判断是否触发图片更新
35+
update : function(setting,element){
36+
if(this.abovethetop(setting,element) && this.abovetheleft(setting,element)){
37+
setting.apper && setting.apper(element);
38+
this.change(element);
39+
}
40+
},
41+
// 判断是否接近
42+
abovethetop : function(setting,element){
43+
var fold,
44+
containerHeight;
45+
if(element.getAttribute('src') != setting.placeholder){
46+
return false;
47+
}
48+
if(setting.container == undefined || setting.container == window){
49+
if (window.pageYOffset) {
50+
fold = window.pageYOffset;
51+
}
52+
else{
53+
fold = document.body.scrollTop;
54+
}
55+
containerHeight = document.documentElement.clientHeight
56+
}else{
57+
fold = setting.container.scrollTop;
58+
containerHeight = setting.container.clientHeight
59+
}
60+
fold = fold ? fold : 0;
61+
return fold + containerHeight + setting.threshold >= element.offsetTop;
62+
},
63+
abovetheleft : function(setting,element){
64+
var fold,
65+
containerWidth;
66+
if(element.getAttribute('src') != setting.placeholder){
67+
return false;
68+
}
69+
if(setting.container == undefined || setting.container == window){
70+
if (window.pageYOffset) {
71+
fold = window.pageXOffset;
72+
}
73+
else {
74+
fold = document.body.scrollLeft;
75+
}
76+
containerWidth = document.documentElement.clientWidth
77+
}else{
78+
fold = setting.container.scrollLeft;
79+
containerWidth = setting.container.clientWidth
80+
}
81+
fold = fold ? fold : 0;
82+
return fold + containerWidth + setting.threshold >= element.offsetLeft;
83+
},
84+
// 改变默认图片
85+
change : function(element){
86+
var originalSrc = element.getAttribute('data_attribute');
87+
if(originalSrc){
88+
element.src = originalSrc;
89+
};
90+
}
91+
}

0 commit comments

Comments
 (0)