使用IntersectionObserver接口进行图片懒加载 ゞ 浴缸里的玫瑰 2021-11-02 06:48 234阅读 0赞 参考文章: [简书][Link 1] 文中图片来源: [http://www.acgjc.com][http_www.acgjc.com] \[MDN\] IntersectionObserver接口 (从属于Intersection Observer API) 提供了一种异步观察目标元素与其祖先元素或顶级文档视窗(viewport)交叉状态的方法。祖先元素与视窗(viewport)被称为根(root)。 也就是说, 这是用来监听页面中模块可见区域的。 懒加载代码如下 let imgList = document.querySelectorAll('img'); // 获取页面中所有img对象 let observer = new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.intersectionRatio > 0 && entry.intersectionRatio <= 1) { // intersectionRatio 表示相交区域和目标元素的比例值 // 也可以用sIntersecting 目标元素当前是否可见 Boolean值 可见为true entry.target.src = entry.target.dataset.src // 图片进入进入可见区域, 则赋予data-src值给src属性 observer.unobserve(entry.target) // 图片已加载, 解除观察 } }) }) imgList.forEach(img => { observer.observe(img); // 观察没一个图片对象 }) 应用 <!DOCTYPE html> <html> <head> <title></title> </head> <style type="text/css"> .list { width: 500px; height: 300px; margin: 20px; } .img { width: 100%; height: 300px; } </style> <body> <div>图片来源于http://www.acgjc.com</div> <div class="list"> <img data-src="http://img.acgjc.com/wp-content/uploads/2019/07/183dc2537018c3e8934c819251c72136-1024x576.jpg" class="img"> </div> <div class="list"> <img data-src="http://img.acgjc.com/wp-content/uploads/2019/07/90cfb81aebc76a0fad7d311800fdbff2-1024x576.jpg" class="img"> </div> <div class="list"> <img data-src="http://img.acgjc.com/wp-content/uploads/2019/07/3685ffdd022374d80d5a5b0a1830146c-1024x553.jpg" class="img"> </div> <div class="list"> <img data-src="http://img.acgjc.com/wp-content/uploads/2019/07/e62c330f09a9c86a6b3471850b22957b-1024x512.jpg" class="img"> </div> <div class="list"> <img data-src="http://img.acgjc.com/wp-content/uploads/2019/07/c374b5e14e5f36fc76ff6485782fd6d8-1-1024x473.jpg" class="img"> </div> <div class="list"> <img data-src="http://img.acgjc.com/wp-content/uploads/2018/07/7255d9b1da818860b351d67762b59029-1024x576.png" class="img"> </div> <div class="list"> <img data-src="http://img.acgjc.com/wp-content/uploads/2018/07/9d94d1b3710caafc47d956c9b78cb636-1024x768.jpg" class="img"> </div> <div class="list"> <img data-src="http://img.acgjc.com/wp-content/uploads/2018/07/04f614a8a2c31c009dacfa04965474b4-1024x769.jpg" class="img"> </div> <script type="text/javascript"> let imgList = document.querySelectorAll('.img') let observer = new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.intersectionRatio > 0 && entry.intersectionRatio <= 1) { entry.target.src = entry.target.dataset.src observer.unobserve(entry.target) } }) }) imgList.forEach(img => { observer.observe(img) }) </script> </body> </html> 效果 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXVuY3lXdQ_size_16_color_FFFFFF_t_70][] 页面往下滚动 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXVuY3lXdQ_size_16_color_FFFFFF_t_70 1][] 可以看见, 一开始, 页面中可见范围中有三张图片, 后台网络也是确实只有三次请求。随着页面往下滚动, 浏览器依次进行图片请求。且已加载的不会再请求。可见这样是符合懒加载的效果的。 [Link 1]: https://www.jianshu.com/p/84a86e41eb2b [http_www.acgjc.com]: http://www.acgjc.com [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXVuY3lXdQ_size_16_color_FFFFFF_t_70]: /images/20211102/147e586320fc4dd7ab3410d69e6d06eb.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXVuY3lXdQ_size_16_color_FFFFFF_t_70 1]: /images/20211102/ffd7913c7e7e437bad8fd8968dabb686.png
相关 图片懒加载 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Nvbmds 青旅半醒/ 2022年11月16日 13:41/ 0 赞/ 326 阅读
相关 图片懒加载 function lazyLoadImg() { var img = document.getElementsByTagName('img'); s 谁践踏了优雅/ 2022年09月28日 13:05/ 0 赞/ 389 阅读
相关 图片懒加载 在一个项目中,如果同时加载的图片太多的话,会导致页面卡顿,这个时候就会用到懒加载。懒加载的实现原理是监听浏览器的滚动条事件,先加载出前面几张图片,然后当滚动条滚动的时候再依次加 分手后的思念是犯贱/ 2022年06月17日 13:49/ 0 赞/ 172 阅读
相关 图片懒加载 1.引入js jquery.lazyload.js(如下) / Lazy Load - jQuery plugin for lazy loading 缺乏、安全感/ 2022年06月16日 06:44/ 0 赞/ 493 阅读
相关 图片懒加载 懒加载的意义[(在线demo预览)][demo] 尽管很多公司的网页都有一些限制,比如页面的最大的图片大小不得大于50k,也有很多图片优化工具fis3、gulp等等,但是 痛定思痛。/ 2022年06月04日 07:58/ 0 赞/ 531 阅读
相关 图片懒加载 在实际的项目开发中,我们通常会遇见这样的场景:一个页面有很多图片,而首屏出现的图片大概就一两张,那么我们还要一次性把所有图片都加载出来吗?显然这是愚蠢的,不仅影响页面渲染速度, 偏执的太偏执、/ 2022年05月28日 02:07/ 0 赞/ 551 阅读
相关 图片懒加载 <!--<!doctype html>--> <!--<html lang="en">--> <!--<head>--> <!--<me 亦凉/ 2022年05月23日 12:19/ 0 赞/ 488 阅读
相关 图片懒加载 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> r囧r小猫/ 2022年05月21日 06:54/ 0 赞/ 532 阅读
相关 使用IntersectionObserver接口进行图片懒加载 参考文章: [简书][Link 1] 文中图片来源: [http://www.acgjc.com][http_www.acgjc.com] \[MDN\] Inters ゞ 浴缸里的玫瑰/ 2021年11月02日 06:48/ 0 赞/ 235 阅读
相关 图片懒加载 \[外链图片转存失败(img-vbwUXXxJ-1563574134995)([https://upload-images.jianshu.io/upload\_images/ 川长思鸟来/ 2021年09月30日 00:24/ 0 赞/ 848 阅读
还没有评论,来说两句吧...