一文搞懂JavaScript如何实现图片懒加载

yizhihongxing

一文搞懂JavaScript如何实现图片懒加载

在一个网站中,有大量的图片需要加载。而有些图片是用户可能看不到或者需要滚动到特定位置才能看到的,这时候我们就可以使用图片懒加载的技术,只在需要加载图片的时候进行加载,提高了网站页面的性能。

什么是图片懒加载

图片懒加载是一种技术,就是在用户滑动页面的时候,再去加载需要显示的图片,而不是在用户打开页面的时候全部加载。

实现原理

实现图片懒加载主要基于以下两个原理:

  1. 首先图片需要有一张默认的属性src;
  2. 当图片进入可视区域时,需要将默认的src属性替换成真正的图片地址。

基于这两个原理,我们可以写出如下的图片懒加载代码:

function lazyLoad() {
    const images = document.querySelectorAll('img[data-src]');
    images.forEach((img) => {
        const visibility = img.getBoundingClientRect().top <= window.innerHeight;
        if (visibility) {
            img.setAttribute('src', img.getAttribute('data-src'));
            img.onload = () => {
                img.removeAttribute('data-src');
            }
        }
    });
}
window.addEventListener('scroll', lazyLoad);

上述代码通过getBoundingClientRect()方法,获取每一个需要懒加载的图片相对于视口的位置信息,当图片的位置信息进入可视区域之后,就会将图片的默认data-src属性替换成真实的图片地址,为了确保图片加载完全,还绑定了onload事件,当图片加载完成之后,移除data-src属性。

图片懒加载的优势

  1. 提高了网页性能,减轻了服务器压力;
  2. 加快页面加载速度,提高用户体验;
  3. 减少了不必要的流量消耗。

示例1

<div id="container">
    <img src="default.jpg" data-src="real.jpg">
    <img src="default.jpg" data-src="real.jpg">
    <img src="default.jpg" data-src="real.jpg">
    <img src="default.jpg" data-src="real.jpg">
    <img src="default.jpg" data-src="real.jpg">
    <img src="default.jpg" data-src="real.jpg">
    <img src="default.jpg" data-src="real.jpg">
    <img src="default.jpg" data-src="real.jpg">
    <img src="default.jpg" data-src="real.jpg">
</div>
<script>
    function lazyLoad() {
        const images = document.querySelectorAll('img[data-src]');
        images.forEach((img) => {
            const visibility = img.getBoundingClientRect().top <= window.innerHeight;
            if (visibility) {
                img.setAttribute('src', img.getAttribute('data-src'));
                img.onload = () => {
                    img.removeAttribute('data-src');
                }
            }
        });
    }
    window.addEventListener('scroll', lazyLoad);
</script>

以上代码实现了最基础的图片懒加载功能,在图片进入可视区域时才会进行加载,提高了页面性能。

示例2

<div id="container">
    <img src="default.jpg" data-src="real1.jpg">
    <img src="default.jpg" data-src="real2.jpg">
    <img src="default.jpg" data-src="real3.jpg">
    <img src="default.jpg" data-src="real4.jpg">
    <img src="default.jpg" data-src="real5.jpg">
    <img src="default.jpg" data-src="real6.jpg">
    <img src="default.jpg" data-src="real7.jpg">
    <img src="default.jpg" data-src="real8.jpg">
    <img src="default.jpg" data-src="real9.jpg">
</div>
<script>
    function lazyLoad() {
        const images = document.querySelectorAll('img[data-src]');
        images.forEach((img) => {
            const visibility = img.getBoundingClientRect().top <= window.innerHeight;
            if (visibility) {
                img.setAttribute('src', img.getAttribute('data-src'));
                img.onload = () => {
                    img.removeAttribute('data-src');
                }
            }
        });
    }
    window.addEventListener('scroll', lazyLoad, { passive: true });
</script>

在这个示例中,我们给addEventListener函数加了一个{ passive: true }的选项。这个选项表示这个事件处理函数不会调用preventDefault方法,这样可以避免一些不必要的性能问题。

总结

通过上面的示例,我们熟悉了图片懒加载的原理以及实现方法,如果我们在页面中存在大量的图片,使用图片懒加载可以更好的提升页面性能,也可以优化用户体验,提高页面的可用性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文搞懂JavaScript如何实现图片懒加载 - Python技术站

(0)
上一篇 2023年6月13日
下一篇 2023年6月13日

相关文章

  • jquery和css3实现的炫酷时尚的菜单导航

    首先我们来详细讲解一下如何使用jQuery和CSS3实现炫酷时尚的菜单导航的方法。 准备工作 在开始实践之前,我们需要准备一些必要的工作: HTML结构。 CSS样式。 jQuery库文件。 接下来我们会详细讲解这三个方面的内容。 HTML结构 菜单导航的HTML结构是非常重要的,它直接影响着我们后续的开发工作。一个典型的菜单导航HTML结构如下所示: &l…

    css 2023年6月10日
    00
  • 条件CSS的高级用法

    条件CSS的高级用法 条件 CSS 是一种在 CSS 中使用条件语句的技术,可以根据不同的条件应用不同的样式。以下是一些常见的条件 CSS 用法。 方法一:使用 @supports 使用 @supports 是一种常见的条件 CSS 技术,可以根据浏览器是否支持某个 CSS 属性来应用不同的样式。以下是一个示例: /* 默认样式 */ .box { back…

    css 2023年5月18日
    00
  • 格式png24透明底 多种解决png24格式图片在ie6中透明问题

    针对“格式png24透明底 多种解决png24格式图片在ie6中透明问题”这个问题,我可以提供以下完整攻略: 使用PNG8格式 虽然PNG24格式可以支持更丰富的颜色和透明度,但在IE6中不支持png透明效果的情况下,我们可以考虑使用PNG8格式。PNG8格式虽然对颜色的支持有一定的限制,但是其兼容性更好,而且透明效果也能够完美兼容IE6。 以下是使用Pho…

    css 2023年6月10日
    00
  • css实现“加号”效果的实例代码

    我来为您讲解一下使用CSS实现“加号”效果的攻略。 一、通过动态伪类实现 HTML结构: <div class="box"> <div class="plus"></div> </div> CSS样式: .box { width: 50px; height: 50px; …

    css 2023年6月10日
    00
  • CSS3实现王者荣耀匹配人员加载页面的方法

    以下是“CSS3实现王者荣耀匹配人员加载页面的方法”的完整攻略。 什么是王者荣耀匹配人员加载页面 王者荣耀匹配人员加载页面是一个现代化的网页程序,它会根据指定的条件,展示在线等待匹配的战队或个人,提供给用户一个便捷的玩家匹配体验。在该页面中,用户可以查看匹配时的核心信息,如队伍成员、英雄选择、所处段位等,并可以进行交流、挑选匹配或观看等一系列操作。 采用CS…

    css 2023年6月10日
    00
  • 网页布局之响应式设计简明指南

    网页布局之响应式设计简明指南 什么是响应式设计? 响应式设计(responsive design),简称RWD,是指网站能够在不同设备上自适应显示,不管是在电脑屏幕上、平板电脑上还是在手机屏幕上浏览网站,都能够获得更好的用户体验。响应式设计的主要目标是通过代码技术实现一个网站能够自适应地适配多种不同的设备屏幕尺寸,使得用户在不同终端上访问相同的网站时,其体验…

    css 2023年6月9日
    00
  • CSS3 @font-face属性使用指南

    下面将详细讲解“CSS3 @font-face属性使用指南”的完整攻略。 一、@font-face属性概述 @font-face是CSS3引入的一个用于设置字体的规则,它可以让网站使用自定义字体,而无需将字体上传到服务器。 @font-face的语法如下: @font-face { font-family: <family-name>; src:…

    css 2023年6月9日
    00
  • 在vue中实现禁止屏幕滚动,禁止屏幕滑动

    在Vue中实现禁止屏幕滚动、禁止屏幕滑动可以通过以下两种方式进行: 1. CSS实现 使用CSS可以通过设置html和body元素的样式来实现禁止屏幕滚动: html, body { overflow: hidden; height: 100%; } 设置overflow: hidden可以禁止滚动条出现,而height: 100%则可以使内容填充整个可视区…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部