Skip to content

Commit 3dc612c

Browse files
committed
更新图片“懒加载”代码
1 parent f97cd37 commit 3dc612c

File tree

8 files changed

+2147
-31
lines changed

8 files changed

+2147
-31
lines changed

lazy-load-img/README.md

+32-5
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,48 @@
22
移动端“瀑布流”形式列表图片懒加载
33

44
### 使用方法
5-
1.为需要懒加载的DOM节点添加自定义属性``node-type='imglazy' ```
6-
2.`src`需要有一个默认值,可以设置为`#`
7-
3.img标签需要自定义属性`data-lazysrc ` 并且将真实的图片地址赋值给data-lazysrc
5+
1.为需要懒加载的图片节点添加自定义属性`node-type='imglazy' `
6+
7+
2.img标签添加自定义属性`data-lazysrc ` ,并且将图片地址赋值给data-lazysrc
8+
9+
3.图片的真实地址`src`赋值默认值为`#`
10+
11+
4.可以在任意节点添加配置属性`lazy-setting`
12+
13+
配置信息如下:
14+
```
15+
<div lazy-setting='{
16+
"mobileHeight":0, /*默认客户端的高度,值越大,首屏加载的图片越多*/
17+
"loadNum":1 /*加载当前节点后的节点的个数*/
18+
}'>
19+
```
20+
821

922
**以上可以参考testhtml.html的结构**
23+
24+
### 2016/02/22更新
25+
1.添加示例`demo`
26+
27+
2.添加加载图片的可配置项
28+
- `**mobileHeight**` 默认客户端的高度,值越大,首屏加载的图片越多
29+
- **`loadNum`** 如果当前节点出现在屏幕上以后,可以一次性加载当前节点之后的若干个节点,可以跳高图片的加载速度
30+
31+
3.优化滚动时“懒加载”部分代码
32+
33+
34+
1035
### 2015/12/16更新
1136
1,使用闭包重构懒加载的函数
37+
1238
2,增加配置文件的使用,使用户对懒加载的行为更加可控
39+
1340
3,通过`that` 暴露函数内部方法给用户,包括销毁内部对象,和解除绑定方法
1441

1542

16-
### 2015/22/27更新
43+
### 2015/12/27更新
1744
`imglazy`节点在屏幕的可是区域内时,立即加载图片
1845

19-
### 2015-10-29
46+
### 2015/10/29
2047
### # 1.解决当src为空时
2148
`location.href`获取的值为当前页面的域名
2249

lazy-load-img/css/lazy.css

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
*{
2+
margin:0;
3+
padding:0;
4+
}
5+
.clearfix:after {
6+
display: block;
7+
height: 0;
8+
content: "\200B";
9+
clear: both;
10+
}
11+
.href-block img{
12+
width: 180px;
13+
height:180px;
14+
}
15+
16+
.content-left ,.content-right{
17+
float:left;
18+
}
19+
20+
.content-right{
21+
margin-left:15px;
22+
}

lazy-load-img/img/pc_ebg1.jpg

45.2 KB
Loading

lazy-load-img/img/pc_ebg2.jpg

41.2 KB
Loading
File renamed without changes.

lazy-load-img/js/loadLazyImg.js

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
/**
2+
* Created by zhiqiang on 2015/10/14.
3+
* hpuhouzhiqiang@gmail.com
4+
* 图片的懒加载
5+
**/
6+
;(function($) {
7+
var LoadImgLazy = function(imgNode) {
8+
var _this = this;
9+
_this.imgNode = imgNode;
10+
11+
_this.setting = {
12+
"mobileHeight": 0, //扩展屏幕的高度,使第一屏加载个数可配置
13+
"loadNum": 1 //滚动时,当前节点之后加载个数
14+
};
15+
16+
$.extend(_this.setting, _this.getSetting());
17+
18+
_this.loadFirstSrceen();
19+
$(window).on('scroll', function() {
20+
_this.scrollLoadImg();
21+
});
22+
23+
24+
};
25+
26+
LoadImgLazy.prototype = {
27+
mobileHeight: function() {
28+
return $(window).height();
29+
},
30+
loadFirstSrceen: function() {
31+
// 加载首屏
32+
var _this = this;
33+
var currentNodeTop;
34+
var imgNodeList = _this.imgNode;
35+
$(imgNodeList).each(function() {
36+
currentNodeTop = $(this).offset().top;
37+
if (currentNodeTop < _this.mobileHeight() + _this.setting.mobileHeight) {
38+
_this.replaceImgSrc($(this));
39+
}
40+
});
41+
},
42+
scrollLoadImg: function() {
43+
//滚动的时候加载图片
44+
var _this = this;
45+
var currentNodeTop;
46+
var scrollTop = $('body').scrollTop();
47+
var imgLazyList = $('[node-type=imglazy]');
48+
49+
$(imgLazyList).each(function() {
50+
currentNodeTop = $(this).offset().top;
51+
if (currentNodeTop - scrollTop < _this.mobileHeight()) {
52+
//加载当前节点后的规定个数节点
53+
for (var i = 0, len = _this.setting.loadNum; i < len; i++) {
54+
_this.replaceImgSrc($(imgLazyList).eq(i));
55+
}
56+
return false;
57+
}
58+
});
59+
},
60+
replaceImgSrc: function(loadImgNode) {
61+
//动态替换图片
62+
var srcValue;
63+
var imgDataSrc;
64+
var _this = this;
65+
var imgUrlList = $(loadImgNode).find('img[data-lazysrc]');
66+
67+
if (imgUrlList.length > 0) {
68+
imgUrlList.each(function(i) {
69+
imgDataSrc = $(this).attr('data-lazysrc');
70+
srcValue = $(this).attr('src');
71+
if (srcValue === '#') {
72+
if (imgDataSrc) {
73+
$(this).attr('src', imgDataSrc);
74+
$(this).removeAttr('data-lazysrc');
75+
}
76+
}
77+
});
78+
//移除已经运行过懒加载节点的node-type 对性能提升
79+
$(loadImgNode).removeAttr('node-type');
80+
}
81+
},
82+
getSetting: function() {
83+
var userSetting = $('[lazy-setting]').attr('lazy-setting');
84+
if (userSetting && userSetting !== '') {
85+
return $.parseJSON(userSetting);
86+
} else {
87+
return {};
88+
}
89+
},
90+
destory: function() {
91+
//销毁方法区
92+
$(window).off('scroll');
93+
}
94+
};
95+
96+
LoadImgLazy.init = function(imgNode) {
97+
new this(imgNode);
98+
};
99+
100+
window.LoadImgLazy = LoadImgLazy;
101+
102+
})(Zepto);

0 commit comments

Comments
 (0)