JavaScript图片懒加载的优化方法详解

 更新时间:2022年03月28日 15:39:02   作者:故里有长安丶丶  
这篇文章主要为大家详细介绍了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事件就不再触发*

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!   。

相关文章

  • 从零使用TypeScript开发项目打包发布到npm

    从零使用TypeScript开发项目打包发布到npm

    这篇文章主要介绍了从零使用TypeScript开发项目打包发布到npm,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • js实现连连看游戏

    js实现连连看游戏

    这篇文章主要为大家详细介绍了js实现连连看游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)

    javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)

    在很多网站上能看到图片跟随鼠标移动的JS特效,其实做法很简单,本文就介绍了很多javascript鼠标跟随运动,在这里与大家分享下。
    2016-10-10
  • 详细谈谈ES6中的symbol数据类型

    详细谈谈ES6中的symbol数据类型

    这篇文章主要给大家介绍了关于ES6中symbol数据类型的相关资料,Symbol函数的特性是每一个Symbol函数的返回值都是唯一的,可以通过给symbol函数传递不同的参数产生具有不同标记的值,需要的朋友可以参考下
    2021-08-08
  • IE下JS保存图片的简单实例

    IE下JS保存图片的简单实例

    下面小编就为大家带来一篇IE下JS保存图片的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • JavaScript如何借用构造函数继承

    JavaScript如何借用构造函数继承

    这篇文章主要介绍了JavaScript如何借用构造函数继承,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • javascript实现回到顶部特效

    javascript实现回到顶部特效

    当页面特别长的时候,用户想回到页面顶部,必须得滚动好几次滚动键才能回到顶部,如果在页面右下角有个“返回顶部”的按钮,用户点击一下,就可以回到顶部,对于用户来说,是一个比较好的体验。
    2015-05-05
  • javascript特效实现——当前时间和倒计时效果的简单实例

    javascript特效实现——当前时间和倒计时效果的简单实例

    下面小编就为大家带来一篇javascript特效实现——当前时间和倒计时效果的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • webpack4之如何编写loader的方法步骤

    webpack4之如何编写loader的方法步骤

    这篇文章主要介绍了webpack4之如何编写loader,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • JS中常用的消息框总结

    JS中常用的消息框总结

    小编给大家总结了JS最常用到的几种消息提示框,大家应该经常用的到,一起学习下吧。
    2018-02-02

最新评论