实现图片懒加载的三种方式

简介:

实现思路

  • 在页面放置img标签
  • 给img图片加上alt, width, height 和 data-src
  • 通过js判断页面是否滚动到某张图片需要显示的位置,这时将src赋值为data-src

offsetTop方式

图片出现在视窗内的情况: offsetTop < clientHeight + scrollTop


de5d8c1e75434a5f1e1ded51b62498d826ac4f59


getBoundingClientRect方式

图片出现在视窗内的情况: element.getBoundingClientRect().top < clientHeight

h5的IntersectionObserver方式

  • intersectionRatio:目标元素的可见比例,即 intersectionRect 占 boundingClientRect 的比例,完全可见时为 1 ,完全不可见时小于等于 0

具体用法如下:



function getTag(tag) {
    return Array.from(document.getElementsByTagName(tag));
}
var observer = new IntersectionObserver(
    (changes) => {
        changes.forEach((change) => {
            if (change.intersectionRatio > 0) {
                var img = change.target;
                img.src = img.dataset.src;
                observer.unobserve(img);
            }
        })
    }
)
getTag('img').forEach((item) => {
    observer.observe(item);
})

优化

  • 通过以下css可以提高性能


  # 之所以使用visibility而不是display是因为
  # visibility不会触发重绘(repaint)和重排(reflow)
  img {
    visibility: hidden;
  }
  
  img[src] {
    visibility: visible;
  }

  • 因为scroll事件的触发频率很高,频繁操作dom结点会造成很大的性能问题,所以需要做节流和防抖设计,减少scroll事件的触发频率



原文发布时间为:2018年06月26日
原文作者: linlixy

本文来源: 掘金 如需转载请联系原作者



相关文章
|
机器学习/深度学习 运维 算法
大模型开发:描述一种用于异常检测的技术或算法。
LOF算法是一种无监督异常检测技术,通过比较数据点局部密度识别离群点。它计算每个点的局部离群因子得分,得分高则异常可能性大。主要步骤包括:距离度量、k近邻搜索、计算局部可达密度和LOF得分,然后设定阈值识别异常点。适用于入侵检测、故障检测等场景,Python中可使用scikit-learn库实现。
408 1
|
4月前
|
SQL 监控 机器人
|
移动开发 Android开发 iOS开发
uniapp开发H5及app监听返回事件(以及监听不到的处理方法)
uniapp开发H5及app监听返回事件(以及监听不到的处理方法)
3244 0
|
小程序 开发工具
微信小程序云开发的开通
微信小程序云开发的开通
1063 0
微信小程序云开发的开通
|
前端开发 JavaScript 定位技术
JavaScript 等待异步请求数据返回值后,继续执行代码 —— async await Promise的使用方法
JavaScript 等待异步请求数据返回值后,继续执行代码 —— async await Promise的使用方法
467 1
|
JavaScript API
如何实现图片懒加载
如何实现图片懒加载
300 0
|
Web App开发 JavaScript 前端开发
JavaScript 技术篇-navigator.permissions读取chrome剪切板权限获取不生效原因:只有在https协议下使用有效。手动设置chrome页面剪切板读取权限方法
JavaScript 技术篇-navigator.permissions读取chrome剪切板权限获取不生效原因:只有在https协议下使用有效。手动设置chrome页面剪切板读取权限方法
2378 0
JavaScript 技术篇-navigator.permissions读取chrome剪切板权限获取不生效原因:只有在https协议下使用有效。手动设置chrome页面剪切板读取权限方法
|
前端开发 JavaScript UED
使用JavaScript实现滑动动画的几种方法
使用JavaScript实现滑动动画的几种方法
|
编译器 C语言
c头文件
c头文件
159 0
|
缓存 移动开发 JavaScript
【面试题】6月 vue核心面试题汇总(一)
【面试题】6月 vue核心面试题汇总(一)
296 1