2.原生js实现图片懒加载
网上查了很多图片懒加载的内容, 但基本上都是jQuery实现的, 没有说清楚其原理, 所以研究了一下
多的不说, 上代码, 看不明白的建议看下我的上一篇文章<1. 图解浏览器和用户设备的宽高等属性>
HTML部分(图片地址自己随意)
<div>
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
</div>
JS部分
/*
思路 1.先将图片地址存在"data-src"中
2.图片出现在页面中就将"src"的地址改变
重点 判断图片是否出现在页面中
1.图片距离页面顶部的高度 + 屏幕高度
2.页面距离顶部被卷起来的高度
*/
//可操作部分(建议使用前测试)
var m = 500; //值越大顶部加载的越多
var n = 0; //值越大加载的越多 //选定img元素
var imgs = document.getElementsByTagName("img");
//判断浏览器的高度
var win_h = window.innerHeight||document.documentElement.clientHeight;
//更换图片
function replace(num){
//不能直接将img的"src"等于"data-src",所以先获取"data-src"的值,然后再添加给"src"
imgs[num].setAttribute("src", imgs[num].getAttribute("data-src"));
} //页面滚动时判断滚动到位置(出现在视图窗口),进行加载
window.onscroll = function(){
//页面被卷起来的部分的高度
var scroll_top = window.pageYOffset;
//图片距离页面顶部的高度
for (var i = 0; i < imgs.length; i++) {
var c = imgs[i].offsetTop;
//当图片刚好在可视窗口之内时,替换内容
if (c > (scroll_top - m) && c < (scroll_top + win_h - n)) {
replace(i);
}
}
}
//开始页面就要加载一部分图片
window.onscroll();
虽然比较啰嗦, 但是内容详细. 希望能帮到大家
最终效果如下:

2.原生js实现图片懒加载的更多相关文章
- 页面性能优化-原生JS实现图片懒加载
在项目开发中,我们往往会遇到一个页面需要加载很多图片的情况.我们可以一次性加载全部的图片,但是考虑到用户有可能只浏览部分图片.所以我们需要对图片加载进行优化,只加载浏览器窗口内的图片,当用户滚动时,再 ...
- 原生js实现图片懒加载+加入节流
这两天在学习图片的懒加载实现,看了很多大佬的博客,终于有了点成果.现在用了其中一位大佬的文章中的代码实现了图片懒加载并且在其基础上加入了节流函数. 原理就不多讲了,有需要的可以去大佬的文章看看.大佬文 ...
- js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用
js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用 一.总结 一句话总结:图片懒加载echo.js结合 Amaze UI ScrollSpy 使用的效果就是:懒加载 ...
- js插件---图片懒加载lazyload
js插件---图片懒加载lazyload 一.总结 一句话总结:使用异常简单,src里面放加载的图片,data-original里面放原图片,不懂的位置去官网或者github找API就好. 1.laz ...
- JS实现图片懒加载插件
一.前言 我在前几篇博客的记录中,有说自己在做一个图片懒加载的功能,然后巴拉巴拉的遇到哪些问题,结果做完了也没对懒加载这个功能做一些记录,所以这篇文章主要针对我所实现的思路,以及代码做个记录,实现不佳 ...
- js, javascript 图片懒加载 实例代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js实现图片懒加载
大型购物网站都会采用图片懒加载技术来优化网站首页打开速度,以提高用户体验,那么具体是怎么实现的呢,我们一探究竟. html结构(div包裹一层用来显示背景图片,等待图片加载完成后,显示真实图片) &l ...
- Js 之图片懒加载插件
一.PC端(lazyload) 1.引入js文件 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.m ...
- js实现图片懒加载原理
原理 图片懒加载是前端页面优化的一种方式,在页面中有很多图片的时候,图片加载就需要很多时间,很耗费服务器性能,不仅影响渲染速度还会浪费带宽,为了解决这个问题,提高用户体验,所以就出现了懒加载这种方式来 ...
随机推荐
- Kali 无线网络
WiFi——必备的一个东西: AP:这是无线用户接入到互联网的设备 ESSID:可以用于无限局域网中的多个AP中 BSSID:每个AP的唯一标识符 SSID:网络名称 Channels Wi-Fi可以 ...
- 【转载】Android开发中巧用Activity和Fragment
1.Activity的生命周期 1)多个Activity组成Activity栈,当前活动位于栈顶.我们先来看看各种Activity基类的类图: 当Activity类定义出来之后,这个Activity何 ...
- Android开发利器之pidcat
介绍pidcat: pidcat 是Android届JakeWharton大神开发的一款命令行工具,堪称Android开发利器,它能方便Android程序猿捕获日志,过滤日志,定位程序问题,超级好用. ...
- c语言的全排列
在c语言中实现全排列,对于刚接触c语言,还没学习算法的人来说,比较困难了吧.估计大佬也不会看这种基础的东西,全排列实现的办法很多,在c++中有一个专门的函数可以使用,但是在c中实现就有点困难了.如果你 ...
- Div转为Canvas简直不要太好玩~~~
html2canvas库 今天发现了一个神奇的玩意,简直不要太好玩~~ 用canvas做动画是很难,但是div能比canvas简单不少,只是因为canvas中不能操作Dom元素 这款神器,可以直接将D ...
- 攻防世界web之ics-05
本文借鉴以下两篇文章的指导 https://www.jianshu.com/p/5a502873635b https://blog.csdn.net/about23/article/details/9 ...
- to_sql, to_csv, to_excel, to_json
1.to_sql def to_sql(self, name, con, schema=None, if_exists="fail", index=True, index_labe ...
- mysql autocommit
当autocommit为开启状态时,即使没有手动start transaction开启事务,mysql默认也会将用户的操作当做事务即时提交(自动帮我们 db.commit()) autocommit开 ...
- 开发JQuery插件标准结构
1. 定义作用域 定义一个JQuery插件,首先要把这个插件的代码放在一个不受外界干扰的地方.如果用专业些的话来说就是要为这个插件定义私有作用域.外部的代码不能直接访问插件内部的代码.插件内部的代码不 ...
- BZOJ2733/LG3324 「HNOI2014」永无乡 权值线段树合并
问题描述 BZOJ2733 LG3224 题解 对于每个结点建立一棵权值线段树. 查询操作就去查询第 \(k\) 大,合并操作就合并两颗权值线段树. 并查集维护连通性. 同时 STO hkk,zcr, ...