为什么不想用 jquery lazyload ?
1 需要依赖庞大的 jquery 库,有点大材小用
2 部分(低配)手机上面渲染执行速度太慢
3 感觉之前的 lazyload 写的并不是非常好
我写的 lazyload 我也不敢说好,但是目前符合我的要求,来这里也是学习下
代码如下:
放到页面最底部就可以了
<img class="lazy" data-src="
http://img4.tbcdn.cn/tfscom/i3/TB1T6QgHpXXXXXrXVXXXXXXXXXX_!!0-item_pic.jpg" src="/static/style/img/loading.gif" />
是根据 class="lazy" data-src="" 这两个 html 属性来解析的。
```
(function () {
var sign = "lazy";
var imgsArray = [];
var imgs = document.getElementsByTagName('img');
for (var i = 0; i < imgs.length; i++) {
var img = imgs[i];
var dsrc = img.getAttribute('data-src');
var cname = img.className;
if (cname && cname.indexOf(sign) >= 0 && dsrc && img.src != dsrc) {
imgsArray.push(img);
}
}
var b = document.body;
var loadAreaImages = function () {
var bst = b.scrollTop;
var bsl = b.scrollLeft;
var ih = window.innerHeight;
var iw = window.innerWidth;
for (var i = 0; i < imgsArray.length; i++) {
var img = imgsArray[i];
var dsrc = img.getAttribute('data-src');
if (dsrc && img.src != dsrc) {
var iot = img.offsetTop;
var iol = img.offsetLeft;
if (ih + bst + 100 >= iot && iw + bsl + 100 >= iol && bst - 100 <= iot && bsl - 100 <= iol) {
img.src = dsrc;
}
}
}
}
var lst = null;
var loadImages = function () {
if (lst) {
clearTimeout(lst);
}
lst = setTimeout(loadAreaImages, 500);
}
var bind = function (e, f) {
var l = window.addEventListener;
var w = window.attachEvent;
l ? l(e, f, true) : w('on' + e, f);
}
var eves = ['load', 'scroll', 'resize'];
for (var e in eves)
bind(eves[e], loadImages, true);
})();
```
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/244886
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.