纯JS 10分钟 实现图片懒惰加载
知识点:
1:h5 新增选择器 document.querySelectorAll
2:JS 经典,防抖
3:距离判断:getBoundingClientRect
思路:通过浏览器滚动事件, 判断图片高度是否出现在可视化范围。 如果ok 赋值图片地址src(默认是空 通常地址隐藏在data-src 中),
网上其他实现思路也是同理,实现方式不一样。
复制code保存xx.html:可直接运行看效果
code:
代码已标注详细解释 ,
<!DOCTYPE htm>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<style>
/*消除css默认的间距 方便控制*/
* { margin: ;
padding:
}
li {
height:800px;
list-style:none;
/* https://www.jianshu.com/p/e2eb0d8c9de6 */
box-sizing: border-box;
border:1px solid #
}
img {
display: block;
margin:100px auto;
}
</style>
</head> <body>
<div>
<ul class="box">
<li> <img data-src="img/1.jpg" /></li>
<li> <img data-src="img/2.jpg" /></li>
<li> <img data-src="img/3.jpg" /></li>
<li> <img data-src="img/4.jpg" /></li>
</ul>
</div>
<script>
//闭包
(function() {
var dom = {
//h5 新增选择器
ImgAll: document.querySelectorAll("img")
},
method = {
/**
* window.innerHeight 获取页面的高度不包括工具栏和滚动条
* 获取图片地址:dom.ImgAll[i].dataset.src
* getBoundingClientRect().top 获取到图片到页面顶部的高度
*/
imgOnload: function () {
//这里可以在细节优化 比如已经加载的图片 判断 src 已经存在 不赋值
//或者 赋值完后 在dom.Img 集合里面删除当前元素
for (let i = ; i < dom.ImgAll.length; i++) {
if (dom.ImgAll[i].getBoundingClientRect().top < window.innerHeight) {
dom.ImgAll[i].src = dom.ImgAll[i].dataset.src;
}
}
},
/**
* 防抖
* 详细介绍 https://blog.csdn.net/crystal6918/article/details/62236730
* https://www.2cto.com/kf/201803/728456.html
*/
scollImg: function(fn) {
let handle;
return function() {
let context = this;
let args = arguments;
// 取消之前的延时调用
clearTimeout(handle);
handle = setTimeout(function () {
//apply 改变当前的this 是运行时的context 除暴理解移花接木 此处imgOnload 然并若
//http://www.cnblogs.com/onepixel/p/5143863.html 或者阮一峰 博客 js 目录。
fn.apply(context, arguments);
}, );
}
}
}; window.onload = method.imgOnload(); //滚动事件
window.onscroll = method.scollImg(method.imgOnload);
})();
</script>
</body>
</html>
图片缓存 查看 js个人笔记 renderCvs方法
纯JS 10分钟 实现图片懒惰加载的更多相关文章
- 【JavaScript】使用纯JS实现多张图片的懒加载(附源码)
一.效果图如下 上面的效果图,效果需求如下 1.还没加载图片的时候,默认显示加载图片背景图 2.刚开始进入页面,自动加载第一屏幕的图片 3.下拉界面,当一张图片容器完全显露出屏幕,即刻加载图片,替换背 ...
- js 函数的多图片懒加载(lazy) 带插件版完整解析
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS实现图片懒加载效果 页面需求 1 ...
- js 函数的多图片预加载(preload) 带插件版完整解析
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS实现图片预加载效果 本篇文章写的 ...
- jquery.imgpreload.min.js插件实现页面图片预加载
页面分享地址: http://wenku.baidu.com/link?url=_-G8miwbgDmEj6miyFtjit1duJggBCJmFjR2jky_G1VftD9eS9kwGOlFWAOR ...
- [js开源组件开发]图片懒加载lazyload
图片懒加载lazyload 前端对请求的一种优化方式,为什么叫懒加载,无从查起,反正我当初一直认为它是滚动加载的一种类型.它主要是以图片或背景在可视区域内时才显示真正的图片,减少src带来的负荷.所以 ...
- JS代理模式实现图片预加载
---恢复内容开始--- 刚刚说了懒加载,现在我们来搞搞预加载吧 预加载的核心: 图片等静态资源在使用前提前请求. 资源后续使用可以直接从缓存中加载,提升用户体验. 几个误区: 预加载不是为了减少页面 ...
- 页面性能优化-原生JS实现图片懒加载
在项目开发中,我们往往会遇到一个页面需要加载很多图片的情况.我们可以一次性加载全部的图片,但是考虑到用户有可能只浏览部分图片.所以我们需要对图片加载进行优化,只加载浏览器窗口内的图片,当用户滚动时,再 ...
- 爬虫之图片懒加载技术及js加密
图片懒加载 图片懒加载概念: 图片懒加载是一种网页优化技术.图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时间.为了 ...
- 原生js开发,无依赖、轻量级的现代浏览器图片懒加载插件,适合在移动端开发使用
优势 1.原生js开发,不依赖任何框架或库 2.支持将各种宽高不一致的图片,自动剪切成默认图片的宽高 比如说你的默认图片是一张正方形的图片,则各种宽度高度不一样的图片,自动剪切成正方形. 完美解决移动 ...
随机推荐
- restTemplate源码解析(目录)
restTemplate是spring实现的,基于restful风格的http请求模板.使用restTemplate可以简化请求操作的复杂性,同时规范了代码风格.本系列文章,将根据以下目录顺序,从源码 ...
- template中实现加减乘除数学运算
django模板只提供了加法的filter,没有提供专门的乘法和除法运算:django提供了widthratio的tag用来计算比率,可以变相用于乘法和除法的计算. # 加法{{value|add:1 ...
- java模板模式项目中使用--封装一个http请求工具类
需要调用http接口的代码继承FundHttpTemplate类,重写getParamData方法,在getParamDate里写调用逻辑. 模板: package com.crb.ocms.fund ...
- 【转载】使用Response.WriteFile输出文件以及图片
Response对象是Asp.Net应用程序中非常重要的一个内置对象,其作用为负责将服务器执行好的信息输出给客户端,可以使用Response.WriteFile方法来像客户端输出文件或者图片,输出图片 ...
- 使用httpwebrequest发送http请求
HttpWebRequest request = WebRequest.Create("url") as HttpWebRequest; request.Timeout = * * ...
- String Buffer和String Builder的区别(转)
相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...
- Ubuntu18.04开机启动sudo命令
首先接前文:ubuntu18.04 下启动Android Studio报错KVM is required to run this AVD. /dev/kvm device: permission de ...
- SSH安全优化
更改远程连接登陆的端口 禁止root管理员直接登陆 密码认证方式改为密钥认证 重要服务不使用公网IP地址 使用防火墙来限制来源IP地址 Port 666 变更SSH服务远 ...
- 团队第六次作业-Beta冲刺及发布说明
1.相关信息 Q A 作业所属课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign/ 作业要求 https: ...
- 模仿DotnetCore中间件的方式,做一个列表过滤的功能
我们的很多功能当中都会遇到对版本进行过滤的场合,例如你可能需要对列表中的数据的时间进行过滤.版本过滤.渠道以及地区信息进行过滤. 原本的做法:设计很多个过滤方法,通过枚举的方式组合,选择需要过滤哪些方 ...