css自学框架之图片懒加载

首先解释一下什么叫图片懒加载。图片懒加载是一种在页面加载时,延迟加载图片资源的技术,也就是说图片资源在需要的时候才会加载,就是在屏幕显示范围内加载图片,屏幕显示范围外图片不加载。

一、关键函数

用到的关键函数:globalThis.IntersectionObserver。

var observer = new IntersectionObserver(callback,options);

IntersectionObserver两个参数:

  1. callback是当被监听元素的可见性变化时,触发的回调函数。一般会调用两次:一次是目标元素刚刚进入视口(开始可见),另一次是完全离开视口(开始不可见)。
  2. options是一个配置参数,可选,有默认的属性值

官方的示例代码

var observer = new IntersectionObserver(changes => {for (const change of changes) {console.log(change.time);// Timestamp when the change occurred// 当可视状态变化时,状态发送改变的时间戳// 对比时间为,实例化的时间,// 比如,值为1000时,表示在IntersectionObserver实例化的1秒钟之后,触发该元素的可视性变化console.log(change.rootBounds);// Unclipped area of root// 根元素的矩形区域信息,即为getBoundingClientRect方法返回的值console.log(change.boundingClientRect);// target.boundingClientRect()// 目标元素的矩形区域的信息console.log(change.intersectionRect);// boundingClientRect, clipped by its containing block ancestors,// and intersected with rootBounds// 目标元素与视口(或根元素)的交叉区域的信息console.log(change.intersectionRatio);// Ratio of intersectionRect area to boundingClientRect area// 目标元素的可见比例,即intersectionRect占boundingClientRect的比例,// 完全可见时为1,完全不可见时小于等于0console.log(change.target);// the Element target// 被观察的目标元素,是一个 DOM 节点对象// 当前可视区域正在变化的元素}
}, {});// Watch for intersection events on a specific target Element.
// 对元素target添加监听,当target元素变化时,就会触发上述的回调
observer.observe(target);// Stop watching for intersection events on a specific target Element.
// 移除一个监听,移除之后,target元素的可视区域变化,将不再触发前面的回调函数
observer.unobserve(target);// Stop observing threshold events on all target elements.
// 停止所有的监听
observer.disconnect();
在这里插入代码片

下面开始实现我们的图片懒加载。

二、Javascript关键代码如下:

lazy: function() {var action ={setFront:function(item){if(item.boundingClientRect.top<=window.innerHeight+100){						var img = new Image();img.src = item.target.link;img.onload = function(){item.target.setAttribute("myth-lazy","finished");item.target.src=item.target.link;};obs.unobserve(item.target);}				}};if(globalThis.IntersectionObserver){var obs = new IntersectionObserver(function(changes){changes.forEach(function(t){action.setFront(t);});	});this.each(function(item){item.link = item.getAttribute("myth-thumb")||item.getAttribute("myth-original");if(!item.getAttribute("myth-lazy")) obs.observe(item);})}}

这里说明一下,这段代码是嫁到我们以前js框架myth.js中的,想看完整结构的在文章末尾下载相关代码。

二、HTML代码如下:

<div class="mythBox mid"><img class="imglazy"  src="img/loading.gif" myth-original="img/1.png"/><img class="imglazy"   src="img/loading.gif" myth-original="img/2.png"/><img class="imglazy"   src="img/loading.gif" myth-original="img/3.png"/><img class="imglazy"   src="img/loading.gif" myth-original="img/4.png"/><img class="imglazy"   src="img/loading.gif" myth-original="img/3.png"/><img class="imglazy"  src="img/loading.gif" myth-original="img/1.png"/><img class="imglazy"   src="img/loading.gif" myth-original="img/2.png"/><img class="imglazy"   src="img/loading.gif" myth-original="img/3.png"/><img class="imglazy"   src="img/loading.gif" myth-original="img/4.png"/><img class="imglazy"   src="img/loading.gif" myth-original="img/2.png"/></div>	<script type="text/javascript">					myth(".imglazy").lazy(true);					</script>

三、展示效果

请添加图片描述
请添加图片描述
第二张图,下面的代码能清楚的看到,展示在用户的部分图片已经展示,未在用户视野范围内的图片还没有展示,指示原来的替代图片。

四、代码下载

源代码下载:请单击

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/111559.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

The driver has not received any packets from the server

在测试数据迁移时遇到的错误。 目录 一、错误 二、解决 三、数据迁移测试 3.1 环境 3.2 源码及测试 3.2.1 源码 3.2.2 测试结果&#xff08;太慢&#xff09; 3.2.3 源码修改 3.2.4 异常及解决 一、错误 The driver has not received any packets from the server. 二…

Openresty(二十一)ngx.balance和balance_by_lua灰度发布

一 openresty实现灰度发布 ① 灰度发布 说明&#xff1a; 早期博客对灰度发布的概念进行解读,并且对原生 nginx灰度实现进行讲解后续&#xff1a; 主要拿节点引流的灰度发布,并且关注gray灰度策略 相关借鉴 ② 回顾HTTP反向代理流程 ngx_http_upstream 可操作点&#…

汉威科技亮相上海传感器展并发表主题演讲,智能传感器大有可为

9月15日&#xff0c;第8届中国&#xff08;上海&#xff09;国际传感器技术与应用展览会圆满落幕&#xff0c;该展会吸引了逾400家传感领域国内外的企业、100余家专业传感应用单位、500余位传感大咖共同参与&#xff0c;展会观众达30000人。作为全球三大传感器展之一的盛会&…

AI与医疗保健:革命性技术如何拯救生命

文章目录 引言AI的应用领域1. 影像识别2. 疾病诊断3. 药物研发4. 个性化治疗 AI技术1. 机器学习2. 深度学习3. 自然语言处理4. 基因组学 实际案例1. Google Health的深度学习模型2. IBM Watson for Oncology3. PathAI的病理学分析 道德和隐私考虑结论 &#x1f389;欢迎来到AIG…

深度解析NLP文本摘要技术:定义、应用与PyTorch实战

目录 1. 概述1.1 什么是文本摘要&#xff1f;1.2 为什么需要文本摘要&#xff1f; 2. 发展历程2.1 早期技术2.2 统计方法的崛起2.3 深度学习的应用2.4 文本摘要的演变趋势 3. 主要任务3.1 单文档摘要3.2 多文档摘要3.3 信息性摘要 vs. 背景摘要3.4 实时摘要 4. 主要类型4.1 抽取…

Promethus(普罗米修斯)安装与配置(亲测可用)

1. 普罗米修斯概述 Prometheus(是由go语言(golang)开发)是一套开源的监控&报警&时间序列数 据库的组合。适合监控docker容器。 Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 。自2012年成立以来&#xff0c;许多公司和组织都采用了Prometheus&#…

python-爬虫-requests

安装模块 pip install requests在jupyter notebook里使用ShiftTab查看 requests requests库的主要方法 方法解释requests.requset()构造一个请求&#xff0c;支持以下各种方法requests.get()获取HTML的主要方法requests.head()获取HTML头部信息requests.post()向HTML网页提…

WebRTC 源码 编译 iOS端

1. 获取依赖工具 首先&#xff0c;确保你已经安装了以下工具&#xff1a; GitDepot ToolsXcode&#xff08;确保已安装命令行工具&#xff09; 2. 下载 depot_tools 使用 git 克隆 depot_tools 并将其添加到你的 PATH 中&#xff1a; /path/to/depot_tools 替换为自己的路径…

ATF(TF-A) EL3 SPMC威胁模型-安全检测与评估

安全之安全(security)博客目录导读 ATF(TF-A) 威胁模型汇总 目录 一、简介 二、评估目标 1、数据流图 三、威胁分析 1、信任边界 2、资产 3、威胁代理 4、威胁类型 5、威胁评估 5.1 端点在直接请求/响应调用中模拟发送方FF-A ID 5.2 端点在直接请求/响应调用中模拟…

驱动开发,IO多路复用(select,poll,epoll三种实现方式的比较)

1.IO多路复用介绍 在使用单进程或单线程情况下&#xff0c;同时处理多个输入输出请求&#xff0c;需要用到IO多路复用&#xff1b;IO多路复用有select/poll/epoll三种实现方式&#xff1b;由于不需要创建新的进程和线程&#xff0c;减少了系统资源的开销&#xff0c;减少了上下…

基于springboot跨国旅游系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

SmFeN钐铁氮稀土永磁材料

钕铁硼作为第三代稀土永磁材料&#xff0c;因其优异的磁性能而获得了广泛应用。但钕铁硼磁体也存在居里温度低&#xff0c;矫顽力温度系数大以及化学稳定性差等缺点&#xff0c;并且镨、钕、镝、铽稀土资源的巨量消耗引发了人们对环境破坏和稀土资源保障可持续性的担忧。因此磁…