纯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.支持将各种宽高不一致的图片,自动剪切成默认图片的宽高 比如说你的默认图片是一张正方形的图片,则各种宽度高度不一样的图片,自动剪切成正方形. 完美解决移动 ...
随机推荐
- TODO-依赖注入与控制反转
交互框架之Actor与Listener的关系 https://www.cnblogs.com/mq0036/p/7473371.html
- h5 点击ios键盘完成 出现键盘大小的白块
document.addEventListener('focusout', function (e) { window.scrollTo() }) 源文件链接 https://blog.csdn.ne ...
- TypeScript入门一:配置TS工作环境
配置手动编译TS文件工作环境 配置webpack自动化打包编译工作环境(后面补充) 一.TypeScript入门学习引言 进入主题之前,首先说明这个系列的博客是我刚刚接触TypeScript的学习笔记 ...
- sql server统计总成绩和排名
这里的图片可以拖拽到一个新页面查看原图!!!! 这里有两个表,需要查询总成绩和排名 Sql语句: select ST.name,SE.Chinese,SE.Math,SE.English, ( SE. ...
- 理解JVM之类加载机制
类完整的生命周期包括加载,验证,准备,解析,初始化,使用,卸载,七个阶段.其中验证,准备,解析统称为连接,类的卸载在前面的关于垃圾回收的博文中已经介绍. 加载,验证,准备,初始化,卸载这五个阶段的顺序 ...
- spark 机器学习 knn 代码实现(二)
通过knn 算法规则,计算出s2表中的员工所属的类别原始数据:某公司工资表 s1(训练数据)格式:员工ID,员工类别,工作年限,月薪(K为单位) 101 a类 8年 ...
- Spring Security 流程
首先创建4个类 流程大致如下: 1.容器启动 加载系统资源与权限列表(HashMap) MyInvocationSecurityMetadataSourceService中的loadResourceD ...
- mailto标签来调用邮箱客户端
最近项目需要使用mailto标签来调用客户端,并且把邮件模板填到客户端. mailto 的用法: a标签直接调用: <a href="mailto:example@qq.com?cc= ...
- webpack 配置react脚手架(四):路由配置
1. 由于 react-router 是集成了 react-router-dom 和 react-router-native的一起的,所以这里要使用的是 react-router-dom, 2. 安装 ...
- test20181102 空间复杂度 和 test20181030 数独
空间复杂度 考场做法 前有时间复杂度,后有空间复杂度. 但是这题不会有CE情况,所以较为好写. 就用map存复杂度,单层循环就搞定了. 至于判断维度的方法,我是用快读从字符串中读入. 然后不管常数,把 ...