Skip to content

Commit 4352e48

Browse files
committed
update
1 parent bd2d86a commit 4352e48

File tree

5 files changed

+268
-83
lines changed

5 files changed

+268
-83
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<script>
2424
 // 获取目标对象
2525
var imgArr = document.getElementsByTagName('img');
26-
var box = document.getElementById('box');
26+
var box = document.getElementById('box');
2727
// 实例化插件
2828
new Lazyload(imgArr,{
2929
container:box,
@@ -43,7 +43,7 @@
4343
### data_attribute
4444
标记名称,选填,默认 'data-original'
4545
### apper
46-
图片即将更换时的回调函数,选填,默认 null
46+
图片即将更换时的回调函数,接受一个参数(当前图片),选填,默认 null
4747
### placeholder
4848
占位图片,选填,默认为一段图片的 base64值
4949

examples/img.jpg

34.7 KB
Loading

examples/index.html

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>lazyload</title>
5+
<script src="lazyload.js"></script>
6+
<style>
7+
img{
8+
display:block;
9+
margin-top:200px;
10+
}
11+
</style>
12+
</head>
13+
<body>
14+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
15+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
16+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
17+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
18+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
19+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
20+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
21+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
22+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
23+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
24+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
25+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
26+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
27+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
28+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
29+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
30+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
31+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
32+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
33+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
34+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
35+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
36+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
37+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
38+
<img src="http://img6.bdstatic.com/img/image/smallpic/chongwu1230.jpeg" data-original="http://img6.bdstatic.com/img/image/smallpic/mingxing1222.jpg">
39+
</body>
40+
<script>
41+
var imgArr = document.getElementsByTagName('img');
42+
var lazyload = new Lazyload(imgArr, {
43+
threshold : 0 ,
44+
event:'scroll',
45+
container:window,
46+
data_attribute:'data-original',
47+
apper:function(target){
48+
console.log('apper::' + target );
49+
}
50+
})
51+
</script>
52+
</html>

examples/lazyload.js

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
// 懒加载插件
2+
// Lazyload 为一个构造函数,需要配合 new 关键字使用
3+
// example
4+
// new Lazyload(target,{
5+
// threshold : 0 , 临界值,相差容器多少 px 位置开始触发图片更新 ,默认值 0
6+
// event:'scroll', 事件类型,默认 scroll
7+
// container:window, 容器,默认 window
8+
// data_attribute:data-original, 标记,真实的图片地址,默认 data-original
9+
// apper:null, 即将触发更新时的回掉函数,默认 null
10+
// placeholder:'' 占位图片,默认 ''
11+
// })
12+
13+
14+
var Lazyload = function (elements, options) {
15+
var that = this;
16+
this.settings = {
17+
threshold: 0, // 临界值
18+
event: 'scroll', // 事件类型
19+
container: window, // 容器
20+
data_attribute: 'data-original', // 标记
21+
apper: null, // 更新图片时的回调函数
22+
placeholder: ''
23+
}
24+
25+
for (var item in options) {
26+
this.settings[item] = options[item];
27+
}
28+
29+
for (var i = 0; i < elements.length; i++) {
30+
var src = elements[i].getAttribute('src');
31+
if (!src || src == '') {
32+
elements[i].src = this.settings.placeholder;
33+
}
34+
that.update(elements[i]);
35+
}
36+
37+
this.settings.container.onscroll = function () {
38+
for (var i = 0; i < elements.length; i++) {
39+
that.update(elements[i]);
40+
}
41+
}
42+
}
43+
44+
45+
Lazyload.prototype = {
46+
47+
// 判断是否触发图片更新
48+
update: function (element) {
49+
if (this.abovethetop(element) && this.abovetheleft(element)) {
50+
51+
// 确保更新函数只执行一次
52+
if (element.src !== element.getAttribute(this.settings.data_attribute)){
53+
this.settings.apper && this.settings.apper(element);
54+
}
55+
56+
this.change(element);
57+
}
58+
},
59+
60+
// 判断是否接近
61+
abovethetop: function (element) {
62+
var fold,
63+
containerHeight;
64+
if (element.getAttribute('src') != this.settings.placeholder && this.settings.placeholder !== '') {
65+
return false;
66+
}
67+
if (this.settings.container == undefined || this.settings.container == window) {
68+
if (window.pageYOffset) {
69+
fold = window.pageYOffset;
70+
}
71+
else {
72+
fold = document.body.scrollTop;
73+
}
74+
containerHeight = document.documentElement.clientHeight
75+
} else {
76+
fold = this.settings.container.scrollTop;
77+
containerHeight = this.settings.container.clientHeight
78+
}
79+
fold = fold ? fold : 0;
80+
return fold + containerHeight + this.settings.threshold >= element.offsetTop;
81+
},
82+
83+
abovetheleft: function (element) {
84+
var fold,
85+
containerWidth;
86+
if (element.getAttribute('src') != this.settings.placeholder && this.settings.placeholder !== '') {
87+
return false;
88+
}
89+
if (this.settings.container == undefined || this.settings.container == window) {
90+
if (window.pageYOffset) {
91+
fold = window.pageXOffset;
92+
}
93+
else {
94+
fold = document.body.scrollLeft;
95+
}
96+
containerWidth = document.documentElement.clientWidth
97+
} else {
98+
fold = this.settings.container.scrollLeft;
99+
containerWidth = this.settings.container.clientWidth
100+
}
101+
fold = fold ? fold : 0;
102+
return fold + containerWidth + this.settings.threshold >= element.offsetLeft;
103+
},
104+
105+
// 改变默认图片
106+
change: function (element) {
107+
var originalSrc = element.getAttribute(this.settings.data_attribute);
108+
if (originalSrc) {
109+
element.src = originalSrc;
110+
};
111+
}
112+
}

src/lazyload.js

Lines changed: 102 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,91 +1,112 @@
1-
"use strict";
2-
var Lazyload = function(elements,options){
3-
var that = this;
4-
this.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-
this.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 = this.settings.placeholder;
21-
}
22-
that.update(elements[i]);
23-
}
24-
25-
this.settings.container.onscroll = function(){
26-
for(var i = 0 ; i < elements.length ; i++){
27-
that.update(elements[i]);
28-
}
29-
}
30-
}
1+
// 懒加载插件
2+
// Lazyload 为一个构造函数,需要配合 new 关键字使用
3+
// example
4+
// new Lazyload(target,{
5+
// threshold : 0 , 临界值,相差容器多少 px 位置开始触发图片更新 ,默认值 0
6+
// event:'scroll', 事件类型,默认 scroll
7+
// container:window, 容器,默认 window
8+
// data_attribute:data-original, 标记,真实的图片地址,默认 data-original
9+
// apper:null, 即将触发更新时的回掉函数,默认 null
10+
// placeholder:'' 占位图片,默认 ''
11+
// })
3112

3213

33-
Lazyload.prototype = {
34-
// 判断是否触发图片更新
35-
update : function(element){
36-
if(this.abovethetop(element) && this.abovetheleft(element)){
37-
this.settings.apper && this.settings.apper(element);
38-
this.change(element);
14+
var Lazyload = function (elements, options) {
15+
var that = this;
16+
this.settings = {
17+
threshold: 0, // 临界值
18+
event: 'scroll', // 事件类型
19+
container: window, // 容器
20+
data_attribute: 'data-original', // 标记
21+
apper: null, // 更新图片时的回调函数
22+
placeholder: ''
3923
}
40-
},
41-
// 判断是否接近
42-
abovethetop : function(element){
43-
var fold,
44-
containerHeight;
45-
if(element.getAttribute('src') != this.settings.placeholder){
46-
return false;
24+
25+
for (var item in options) {
26+
this.settings[item] = options[item];
4727
}
48-
if(this.settings.container == undefined || this.settings.container == window){
49-
if (window.pageYOffset) {
50-
fold = window.pageYOffset;
28+
29+
for (var i = 0; i < elements.length; i++) {
30+
var src = elements[i].getAttribute('src');
31+
if (!src || src == '') {
32+
elements[i].src = this.settings.placeholder;
5133
}
52-
else{
53-
fold = document.body.scrollTop;
54-
}
55-
containerHeight = document.documentElement.clientHeight
56-
}else{
57-
fold = this.settings.container.scrollTop;
58-
containerHeight = this.settings.container.clientHeight
34+
that.update(elements[i]);
5935
}
60-
fold = fold ? fold : 0;
61-
return fold + containerHeight + this.settings.threshold >= element.offsetTop;
62-
},
63-
abovetheleft : function(element){
64-
var fold,
65-
containerWidth;
66-
if(element.getAttribute('src') != this.settings.placeholder){
67-
return false;
36+
37+
this.settings.container.onscroll = function () {
38+
for (var i = 0; i < elements.length; i++) {
39+
that.update(elements[i]);
40+
}
6841
}
69-
if(this.settings.container == undefined || this.settings.container == window){
70-
if (window.pageYOffset) {
71-
fold = window.pageXOffset;
42+
}
43+
44+
45+
Lazyload.prototype = {
46+
47+
// 判断是否触发图片更新
48+
update: function (element) {
49+
if (this.abovethetop(element) && this.abovetheleft(element)) {
50+
51+
// 确保更新函数只执行一次
52+
if (element.src !== element.getAttribute(this.settings.data_attribute)){
53+
this.settings.apper && this.settings.apper(element);
54+
}
55+
56+
this.change(element);
57+
}
58+
},
59+
60+
// 判断是否接近
61+
abovethetop: function (element) {
62+
var fold,
63+
containerHeight;
64+
if (element.getAttribute('src') != this.settings.placeholder && this.settings.placeholder !== '') {
65+
return false;
7266
}
73-
else {
74-
fold = document.body.scrollLeft;
75-
}
76-
containerWidth = document.documentElement.clientWidth
77-
}else{
78-
fold = this.settings.container.scrollLeft;
79-
containerWidth = this.settings.container.clientWidth
67+
if (this.settings.container == undefined || this.settings.container == window) {
68+
if (window.pageYOffset) {
69+
fold = window.pageYOffset;
70+
}
71+
else {
72+
fold = document.body.scrollTop;
73+
}
74+
containerHeight = document.documentElement.clientHeight
75+
} else {
76+
fold = this.settings.container.scrollTop;
77+
containerHeight = this.settings.container.clientHeight
78+
}
79+
fold = fold ? fold : 0;
80+
return fold + containerHeight + this.settings.threshold >= element.offsetTop;
81+
},
82+
83+
abovetheleft: function (element) {
84+
var fold,
85+
containerWidth;
86+
if (element.getAttribute('src') != this.settings.placeholder && this.settings.placeholder !== '') {
87+
return false;
88+
}
89+
if (this.settings.container == undefined || this.settings.container == window) {
90+
if (window.pageYOffset) {
91+
fold = window.pageXOffset;
92+
}
93+
else {
94+
fold = document.body.scrollLeft;
95+
}
96+
containerWidth = document.documentElement.clientWidth
97+
} else {
98+
fold = this.settings.container.scrollLeft;
99+
containerWidth = this.settings.container.clientWidth
100+
}
101+
fold = fold ? fold : 0;
102+
return fold + containerWidth + this.settings.threshold >= element.offsetLeft;
103+
},
104+
105+
// 改变默认图片
106+
change: function (element) {
107+
var originalSrc = element.getAttribute(this.settings.data_attribute);
108+
if (originalSrc) {
109+
element.src = originalSrc;
110+
};
80111
}
81-
fold = fold ? fold : 0;
82-
return fold + containerWidth + this.settings.threshold >= element.offsetLeft;
83-
},
84-
// 改变默认图片
85-
change : function(element){
86-
var originalSrc = element.getAttribute(this.settings.placeholder);
87-
if(originalSrc){
88-
element.src = originalSrc;
89-
};
90112
}
91-
}

0 commit comments

Comments
 (0)