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

一文搞懂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日

相关文章

  • 使用webpack搭建vue项目实现脚手架功能

    下面是使用webpack搭建vue项目实现脚手架功能的完整攻略。 1. 环境准备 首先,我们需要安装Node.js和npm。然后可以通过npm安装webpack和vue-cli: # 全局安装webpack和vue-cli npm install -g webpack vue-cli 2. 创建项目 接下来,我们可以使用vue-cli来创建一个基于webpa…

    css 2023年6月9日
    00
  • Web标准建构的站点一览表

    让我来给你讲解一下“Web标准建构的站点一览表”的完整攻略。 一、什么是Web标准建构的站点一览表 Web标准建构的站点一览表是一个收集各种实例网站的网站列表,该列表仅收录那些完全符合Web标准并建构优良的网站。这个列表帮助网站设计师创建更好的网站,提高网站的可访问性、可维护性和可扩展性。Web标准建构的站点一览表帮助人们了解如何应用标准技术来创建可访问的、…

    css 2023年6月10日
    00
  • 编写HTML和CSS的6种最有效的方法

    当我们编写 HTML 和 CSS 时,有许多不同的方法可供使用。然而,一些方法比其他方法更有效,并且可以更好地帮助我们编写清晰、可扩展、可维护的代码。在本文中,我们将讨论编写 HTML 和 CSS 的六种最有效的方法,并提供一些示例来说明这些方法的用法。 1. 使用语义化的 HTML 语义化 HTML 是指将 HTML 标记分配到正确的含义,而不仅仅是使用最…

    css 2023年6月9日
    00
  • react中使用css的7中方式(最全总结)

    React中使用CSS的7种方式(最全总结) 在React中,使用CSS的方式有多种多样,本文将详细介绍React中使用CSS的7种方式。 1. 在JSX中使用内联样式 React支持在JSX中使用内联样式。为了使用内联样式,请添加一个style属性并将其设置为一个JavaScript对象。这个对象应该表示样式的属性,就像你在CSS中写的一样。值可以是一个固…

    css 2023年6月10日
    00
  • css实现气泡的小尖角效果

    要实现气泡的小尖角效果,可以使用CSS的伪元素和边框技巧来实现。以下是实现的具体步骤: 1. 给气泡外层容器设置相对定位和宽高 .bubble { position: relative; width: 200px; height: 100px; } 2. 给气泡容器添加空白内容并设置绝对定位和边框 .bubble:after { content: &quot…

    css 2023年6月10日
    00
  • js实现卡片式项目管理界面UI设计效果

    实现卡片式项目管理界面UI设计效果,通常需要以下步骤: 1. 确定页面结构 首先,在HTML中确定页面结构,即确定卡片组件的数量和布局。可以使用<div>元素来表示每个卡片组件,其中存放将要展示的项目信息。 示例: <div class="card"> <h2>项目名称</h2> <p…

    css 2023年6月10日
    00
  • CSS 半透明度设置归纳总结[Firefox,IE,Chrome,Safari]

    CSS半透明度设置归纳总结 CSS 半透明度设置是常见的网页美化技巧之一,它可以让元素的背景色更加柔和、透明。在各种 Web 浏览器中,半透明度设置方式有所不同,本文将介绍如何在常用浏览器中设置半透明度。 1. 使用 opacity 属性 在 Firefox、IE、Chrome、Safari 中,使用 opacity 属性可以设置元素的不透明度,取值范围从 …

    css 2023年6月9日
    00
  • css中style和class的加载顺序示例介绍

    让我们来详细讲解“CSS中style和class的加载顺序示例介绍”的攻略。 什么是CSS中style和class 在CSS中,我们通常使用style和class来设置元素的样式。 style用于直接在HTML标签上设置样式,比如: <div style="color: red;">Hello, world!</div&…

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