懒加载 js----例子------图片
转载自:https://www.jianshu.com/p/9b30b03f56c2
懒加载工具类
<script type="text/javascript">
//懒加载工具方法
function lazyload(idName) {
var imgs;
if (idName == "container") {
imgs = document.getElementById('container').querySelectorAll('img');
}
H = window.innerHeight;
var lazyFunc=function () {
var S = document.documentElement.scrollTop || document.body.scrollTop;
[].forEach.call(imgs, function (img) {
if (!img.getAttribute('data-src')) {
return
};
if (H + S + 200 > getTop(img)) {
img.src = img.getAttribute("data-src");
img.removeAttribute("data-src");
}
})
};
window.onload = window.onscroll = lazyFunc;
window.onscroll = lazyFunc;
lazyFunc();
function getTop(e) {
var T = e.offsetTop;
while (e = e.offsetParent) {
T += e.offsetTop;
}
return T;
};
};
lazyload("container");//执行懒加载,可以哪里需要哪里再加
</script>
结束。
原理:就是当图片出现在浏览器可视区域中时,再把图片的url传给它,也可以在这个时候创建图片,而图片被包裹在一个容器中,比如li或div,图片的url放在其容器的自定义属性data-src中;

document.documentElement.clientWidth //屏幕宽 375
document.documentElement.clientHeight //屏幕高 667
document.documentElement.scrollTop //左上角到html鼎高 当前视线元素划上去了多少,也就是当前00原点到页鼎html元素的高度 最底端3457
document.documentElement.scrollHeight //4124 总页高
window.innerHeight //667
window.innerWidth //375
判定其加载条件是,当图片距离页面顶端的距离小于浏览器滚动距离加上可视区域高度,即它出现在可视区域时,就加载它;
- 获取图片距离页面顶端的高度利用offsetTop计算出其距离offsetParent的高度,再循环叠加,最终获取到其距离页面顶端的高度:
//offsetTop是元素与offsetParent的距离,循环获取直到页面顶部
function getTop(e) {
var T = e.offsetTop;
while(e = e.offsetParent) {
T += e.offsetParent;
}
return T;
} 作者:MatthewMaYao
链接:https://www.jianshu.com/p/9b30b03f56c2
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 可视区域高度为
var H = window.innerHeight;
- 滚动距离为
var S = document.documentElement.scrollTop || document.body.scrollTop;
然后定义赋值函数
function lazyLoad(imgs) {
var H = window.innerHeight;
var S = document.documentElement.scrollTop || document.body.scrollTop;
for (var i = 0; i < imgs.length; i++) {
if (H + S > getTop(imgs[i])) {
imgs[i].src = imgs[i].getAttribute('data-src');
}
}
}
作者:MatthewMaYao
链接:https://www.jianshu.com/p/9b30b03f56c2
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
最后在把页面滚动函数赋值给元素window.onload,在所有元素加载完以后再进行操作,这一步很重要!
window.onload = window.onscroll = function () {
lazyLoad(imgs);
}
全部代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>图片懒加载</title>
</head> <style>
img {
display: block;
}
</style> <body>
<div>
<img src="" data-src="data:images/girl1.jpg" alt="图片">
<img src="" data-src="data:images/girl1.jpg" alt="图片">
<img src="" data-src="data:images/girl1.jpg" alt="图片">
<img src="" data-src="data:images/girl1.jpg" alt="图片">
<img src="" data-src="data:images/girl1.jpg" alt="图片">
<img src="" data-src="data:images/girl1.jpg" alt="图片">
<img src="" data-src="data:images/girl1.jpg" alt="图片">
<img src="" data-src="data:images/girl1.jpg" alt="图片">
<img src="" data-src="data:images/girl1.jpg" alt="图片">
<img src="" data-src="data:images/girl1.jpg" alt="图片">
<img src="" data-src="data:images/girl1.jpg" alt="图片">
<img src="" data-src="data:images/girl1.jpg" alt="图片">
<img src="" data-src="data:images/girl1.jpg" alt="图片"> </div>
</body>
<script type="text/javascript"> var imgs = document.querySelectorAll('img'); //offsetTop是元素与offsetParent的距离,循环获取直到页面顶部
function getTop(e) {
var T = e.offsetTop;
while(e = e.offsetParent) {
T += e.offsetParent;
}
return T;
} function lazyLoad(imgs) {
var H = window.innerHeight;
var S = document.documentElement.scrollTop || document.body.scrollTop;
for (var i = 0; i < imgs.length; i++) {
if (H + S > getTop(imgs[i])) {
imgs[i].src = imgs[i].getAttribute('data-src');
}
}
} window.onload = window.onscroll = function () {
lazyLoad(imgs);
} // var imgs = document.body.querySelectorAll('img'),
// H = window.innerHeight; //浏览器视窗高度
// function lazyload() {
// var S = document.documentElement.scrollTop || document.body.scrollTop; //滚动条滚过高度
// [].forEach.call(imgs, function (img) {
// if (!img.getAttribute('data-src')) {
// return
// } //已经替换过的跳过
// if (H + S - 200 > getTop(img)) { //为达到演示效果,这里H+S减去200,延后加载时机
// img.src = img.getAttribute("data-src");
// img.removeAttribute("data-src");
// }
// });
// [].every.call(imgs, function (img) {
// return !img.getAttribute('data-src')
// }) && (window.removeEventListener("scroll", lazyload, false)); //完成所有替换后注销事件
//
// }
//
// window.addEventListener("scroll", lazyload, false);
// window.addEventListener("load", lazyload, false);
//
// function getTop(e) {
// var T = e.offsetTop;
// while (e = e.offsetParent) {
// T += e.offsetTop
// }
// return T
// } </script>
</html> 作者:MatthewMaYao
链接:https://www.jianshu.com/p/9b30b03f56c2
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
结束。
懒加载 js----例子------图片的更多相关文章
- 懒加载js实现和优化
1.懒加载的作用和原理 在我们展示多图片的场景下,类似淘宝或者百度图片,由于图片的数目过多,全部从服务器请求会给用户糟糕的用户体验,为了提升用户体验,我们这里使用懒加载,随着下拉逐步加载. 每个图片的 ...
- 基于jquery的图片懒加载js
function lazyload(option){ var settings={ defObj:null, defHeight: }; settings=$.extend(settings,opti ...
- 爬虫之图片懒加载技术及js加密
图片懒加载 图片懒加载概念: 图片懒加载是一种网页优化技术.图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时间.为了 ...
- 原生js开发,无依赖、轻量级的现代浏览器图片懒加载插件,适合在移动端开发使用
优势 1.原生js开发,不依赖任何框架或库 2.支持将各种宽高不一致的图片,自动剪切成默认图片的宽高 比如说你的默认图片是一张正方形的图片,则各种宽度高度不一样的图片,自动剪切成正方形. 完美解决移动 ...
- JS实现图片懒加载插件
一.前言 我在前几篇博客的记录中,有说自己在做一个图片懒加载的功能,然后巴拉巴拉的遇到哪些问题,结果做完了也没对懒加载这个功能做一些记录,所以这篇文章主要针对我所实现的思路,以及代码做个记录,实现不佳 ...
- js, javascript 图片懒加载 实例代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js插件---图片懒加载lazyload
js插件---图片懒加载lazyload 一.总结 一句话总结:使用异常简单,src里面放加载的图片,data-original里面放原图片,不懂的位置去官网或者github找API就好. 1.laz ...
- 如何使用echo.js实现图片的懒加载(整理)
如何使用echo.js实现图片的懒加载(整理) 一.总结 一句话总结:a.在img标签中添加data-echo属性加载真实图片:<img class="loading" sr ...
- 原生js - 两种图片懒加载实现原理
目前图片懒加载的方式主要有两种: 1.利用getBoundingClientRectAPI得到当前元素与视窗的距离来判断 2.利用h5的新API IntersectionObserver 来实现 ge ...
随机推荐
- wpf中用户控件的属性重用
我们经常会抽取一些可重用的控件,某个属性是否需要重用,直接决定了这个属性的绑定方式. 1.完全不可重用的控件 有一些与业务强相关的控件,它们的属性完全来自ViewModel,越是相对复杂的控件,越容易 ...
- 电脑端与iPad 端如何共享ChemDraw结构
在日常生活中,我们使用的电脑会有好几种系统,很多的软件不能做好各个系统的兼容.但是ChemDraw软件很好的解决了这个问题,可以应用于Mac.Windows两个电脑客户端以及Chem3D for iP ...
- xdebug常用配置
;指定xdebug文件 zend_extension = "F:\tools\develop_tools\php\php_xdebug-2.2.2-5.4-vc9.dll" ;xd ...
- C语言的代码内存布局详解
一个程序本质上都是由 BSS 段.data段.text段三个组成的.这样的概念在当前的计算机程序设计中是很重要的一个基本概念,而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配, ...
- 从 Microsoft Dynamics CRM 4.0 server迁移到 Microsoft Dynamics CRM 2013 Server
不能就地升级早于 Microsoft Dynamics CRM Server 2011 的版本号,比方 Microsoft Dynamics CRM 4.0 server.可是,能够在升级过程中使用 ...
- Hadoop1.2.1 HDFS原理
基本以图片的形式呈现给大家: .
- 机器学习(Machine Learning)
机器学习(Machine Learning)是一门专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能的学科.
- 引入外部文件的时候为什么省略http:
[摘要]相信很多时候大家在使用网上的实例代码的时候,需要引入外部文件,然而它们通常都是省略了http:,这是为什么呢? 先给大家看一个简单的小例子,引入外部jquery文件: <script s ...
- Spring和quartz整合的入门使用教程
Quartz的maven依赖 <!-- quartz 的jar --> <dependency> <groupId>org.quartz-scheduler< ...
- Python--比较两个字典部分value是否相等
# 比较两个字典部分是否相等def compare_two_dict(dict1, dict2, key_list): flag = True keys1 = dict1.keys() keys2 = ...