详解JavaScript两个实用的图片懒加载优化方法

 更新时间:2022年03月28日 08:38:21   作者:故里有长安丶丶  
本文主要介绍了JavaScript两个实用的图片懒加载优化方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一、方法一

在这里插入图片描述

重点:

  • 1.getBoundingClientRect().top > window.innerHeight 图片未出现
  • 2.getBoundingClientRect().top < window.innerHeight 图片出现了

HTML:

<ul>
    ......
    <li>2222222222</li>
    <li>2222222222</li>
    <li>2222222222</li>
    <li>2222222222</li>
    <li>2222222222</li>
    <li>2222222222</li>
    /*先用data-自定义标签,使图片先不加载*/
    <img data-src="./img1.jpg" height="200px"><br>
    <img data-src="./img2.jpg" height="200px" alt=""><br>
    <img data-src="./img3.jpg" height="200px" alt="">
</ul>

JavaScript:

let img = document.querySelectorAll('img')
window.addEventListener('scroll',() => {
	img.forEach((item) => {
		//若图片顶部高度小于视窗高度
		if(item.getBoundingClientRect().top < window.innerHeight) {
			const data_src = item.getAttribute('data-src')
			//则将自定义属性data-src赋值给src属性
			item.setAttribute("src",data_src)
		} 
	})
	console.log("scroll触发了");  //此方法:若加载很多内容,就会导致任务的堆积,影响整体效率
})

请添加图片描述

我们可以看到,虽然图片懒加载已经成功了,但是scroll事件仍在不断触发,非常消耗资源,因此目前最推荐使用的方法还是IntersectionObserver

二、方法二 InterSectionObserver

重点:

  • 1.observer.observe(DOM节点) 观察哪个DOM节点
  • 2.observer.unobserve(DOM节点) 取消观察某DOM节点
  • 3.callback目标能看见触发一次;目标元素看不见了又触发一次

HTML如上
JavaScript:

let img = document.querySelectorAll('img')

//此回调:目标能看见触发一次;目标元素看不见了又触发一次
const callback = (entries) => {   //接收一个数组作为参数,数组每一项都和目标元素相关,比如		isIntersecting判断目标元素是否被观察到了,又比如target属性代表该目标元素
    entries.forEach((item) => {
        //若该目标元素被观察到了
        if(item.isIntersecting) {
            const img = item.target //目标元素
            const data_src = img.getAttribute('data-src')
            img.setAttribute('src',data_src)
            observer.unobserve(img)  //observer.unobserve(DOM节点)  取消观察某DOM节点
        }
        console.log('触发');
    })
}

const observer = new IntersectionObserver(callback)
//遍历所有img,使得所有img被观察
img.forEach((item) => {
    observer.observe(item)  //observer.observe(DOM节点)  观察哪个DOM节点
})

思路:

new一个观察实例,并通过观察实例身上的observe属性观察每一个图片。定义callback回调函数,设置 目标图片出现时改变属性

请添加图片描述

此时我们看到,当所有图片都懒加载完之后(observe取消观察DOM节点),scroll事件就不再触发*

到此这篇关于详解JavaScript两个实用的图片懒加载优化方法的文章就介绍到这了,更多相关JavaScript 图片懒加载优化 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Javascript代码实现仿实例化类

    Javascript代码实现仿实例化类

    这篇文章主要介绍了Javascript代码实现仿实例化类的相关资料并附上示例,非常不错的文章,需要的朋友可以参考下
    2015-04-04
  • JavaScript 浏览器兼容性总结及常用浏览器兼容性分析

    JavaScript 浏览器兼容性总结及常用浏览器兼容性分析

    本文是脚本之家小编日常整理些关于js兼容性问题,及IE与Firefox等常用浏览器的兼容性分析,对js浏览器兼容性相关知识感兴趣的朋友一起学习吧
    2016-03-03
  • JavaScript的parseInt 进制问题

    JavaScript的parseInt 进制问题

    今天在整理以前写过的一段根据周期值自动计算下次执行日期的js代码,发现一bug,我使用parseInt对源数据串进行转换,当输入类似:2009-05-05时,parseInt将把串的05做8进制转换,这样结果自然就不对了。
    2009-05-05
  • 基于JS快速实现导航下拉菜单动画效果附源码下载

    基于JS快速实现导航下拉菜单动画效果附源码下载

    这是一个带变形动画特效的下拉导航菜单特效。该导航菜单在菜单项之间切换时,下拉菜单会快速的根据菜单内容的大小来动态变形,显示合适的下拉菜单大小,效果非常棒,对导航下拉菜单效果感兴趣的朋友一起通过本文学习吧
    2016-10-10
  • javascript解决小数的加减乘除精度丢失的方案

    javascript解决小数的加减乘除精度丢失的方案

    这篇文章主要介绍了javascript解决小数的加减乘除精度丢失的方案的相关资料以及JavaScript中关于丢失数字精度的问题的探讨,非常的详细,需要的朋友可以参考下
    2016-05-05
  • JavaScript移动端常用事件之touch触摸事件详解

    JavaScript移动端常用事件之touch触摸事件详解

    触屏事件touch也称为触摸事件,touch对象代表一个触摸点,触摸点可能是一根手指,也可能是一根触摸笔,触屏事件可响应用户手指(或触摸笔)对屏幕或者触控板操作,下面这篇文章主要给大家介绍了关于JavaScript移动端常用事件之touch触摸事件的相关资料,需要的朋友可以参考下
    2022-10-10
  • JavaScript中三个等号和两个等号你了解多少

    JavaScript中三个等号和两个等号你了解多少

    本篇文章主要介绍了js里面的==和===,== 判断如果两边变量的类型不同,而 === 则不做类型转换,有兴趣的可以了解一下
    2017-07-07
  • Bootstrap CSS布局之表单

    Bootstrap CSS布局之表单

    这篇文章主要介为大家详细绍了Bootstrap CSS布局之表单的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • JavaScript宏任务和微任务区别介绍

    JavaScript宏任务和微任务区别介绍

    这篇文章主要介绍了JavaScript宏任务和微任务区别介绍,js中的任务,大致分为2类,一类是同步任务,另一类是异步任务。而异步任务,又分为宏任务和微任务,这两个任务是两个队列,所以是先进先出的
    2022-07-07
  • javascript函数库-集合框架

    javascript函数库-集合框架

    javascript函数库-集合框架...
    2007-04-04

最新评论