IntersectionObserver实现图片懒加载的示例


Posted in Javascript onSeptember 29, 2017

API:

https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API

直接上源码:

<!DOCTYPE html>
<html>
  <header>
    <style>
      .list-item{
        height: 400px; 
        margin: 5px; 
        background-color: lightblue; 
        list-style: none;
      }
    </style>
  </header>
  <body>
    <li class="list-item"><img class="list-item-img" alt="loading" data-src='./images/icon1.png'></li>
    <li class="list-item"><img class="list-item-img" alt="loading" data-src='./images/icon2.png'></li>
    <li class="list-item"><img class="list-item-img" alt="loading" data-src='./images/icon3.png'></li>
    <li class="list-item"><img class="list-item-img" alt="loading" data-src='./images/icon4.png'></li>
    <li class="list-item"><img class="list-item-img" alt="loading" data-src='./images/icon5.png'></li>
    <li class="list-item"><img class="list-item-img" alt="loading" data-src='./images/icon6.png'></li>

    <script>
      var observer = new IntersectionObserver(function(changes) {
        console.log(changes);
        changes.forEach(function(element, index) {
          // statements
          if (element.intersectionRatio > 0 && element.intersectionRatio <= 1) {
            element.target.src = element.target.dataset.src;
          }
        });
      });


      function addObserver() {
        var listItems = document.querySelectorAll('.list-item-img');
        listItems.forEach(function(item) {
          observer.observe(item);
        });
      }

      addObserver();
    </script>
  </body>
</html>

运行代码后发现,当滚动滚动轴时,只有当<li>区域完全显示出来后才会触发相应的下载图片的http请求。

兼容浏览器:

desktop:

IntersectionObserver实现图片懒加载的示例

Mobile:

IntersectionObserver实现图片懒加载的示例

以上这篇IntersectionObserver实现图片懒加载的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery中复合属性选择器用法实例
Dec 31 Javascript
js实现将选中内容分享到新浪或腾讯微博
Dec 16 Javascript
ES6所改良的javascript“缺陷”问题
Aug 23 Javascript
js实现右键菜单功能
Nov 28 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
Feb 08 Javascript
微信小程序 检查接口状态实例详解
Jun 23 Javascript
js中变量的连续赋值(实例讲解)
Jul 08 Javascript
jQuery选择器之子元素选择器详解
Sep 18 jQuery
Node.js静态服务器的实现方法
Feb 28 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
Mar 09 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
Jan 27 Javascript
亲自动手实现vue日历控件
Jun 26 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
Sep 29 #Javascript
jQuery选择器之子元素过滤选择器
Sep 28 #jQuery
微信禁止下拉查看URL的处理方法
Sep 28 #Javascript
jQuery选择器之属性过滤选择器详解
Sep 28 #jQuery
Angular.js中window.onload(),$(document).ready()的写法浅析
Sep 28 #Javascript
js实现登录注册框手机号和验证码校验(前端部分)
Sep 28 #Javascript
基于JavaScript实现前端数据多条件筛选功能
Aug 19 #Javascript
You might like
php数据库抽象层 PDO
2011/05/07 PHP
php强制更新图片缓存的方法
2015/02/11 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
js实现DIV的一些简单控制
2007/06/04 Javascript
IE/FireFox具备兼容性的拖动代码
2007/08/13 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
2016/09/14 Javascript
Node.js连接postgreSQL并进行数据操作
2016/12/18 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
js实现筛选功能
2020/11/24 Javascript
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
python实现定时提取实时日志程序
2018/06/22 Python
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
使用python绘制温度变化雷达图
2019/10/18 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
HTML5不支持frameset的两种解决方法
2016/11/14 HTML / CSS
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
几道Java和数据库的面试题
2013/05/30 面试题
四风问题对照检查材料整改措施
2014/09/27 职场文书
医院保洁员岗位职责
2015/02/13 职场文书
专家推荐信范文
2015/03/26 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS
Redis唯一ID生成器的实现
2022/07/07 Redis