图片懒加载方式(三)

本文介绍了使用IntersectionObserver API进行图片懒加载的原理,通过监听元素是否进入视口判断是否加载图片,同时提及了需要考虑浏览器兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理:
IntersectionObserver.observe():使IntersectionObserver开始监听一个目标元素;
isIntersecting属性:可以判断该元素是否出现在视口内;
遍历每个img元素,然后监听每一个元素,最后根据isIntersecting属性去判断元素是否出现在视口内,从而决定是否让他加载。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        img {
            height: 450px;
            display: block;
            margin-bottom: 20px;
        }
    </style>
</head>

<body>
    <!--图片地址暂时先保存在data-src这个自定义属性上面-->
    <img data-src="./img-loop/img/1.jpg" alt="懒加载1" />
    <img data-src="./img-loop/img/2.png" alt="懒加载2" />
    <img data-src="./img-loop/img/3.jpg" alt="懒加载3" />
    <img data-src="./img-loop/img/4.jpg" alt="懒加载4" />
    <img data-src="./img-loop/img/5.jpg" alt="懒加载5" />

    <script>
        document.addEventListener("DOMContentLoaded", () => {
            if ("IntersectionObserver" in window) {
                const imgs = document.getElementsByTagName("img");
                const imageObserve = new IntersectionObserver((entries) => {
                    entries.forEach((entry) => {
                        // 通过该属性判断元素是否出现在视口内
                        if (entry.isIntersecting) {
                            // entry.target能够取得那个dom元素
                            const img = entry.target;
                            img.src = img.dataset.src;
                            // 解除监视
                            imageObserve.unobserve(img);
                        }
                    });
                });
                [...imgs].forEach((img) => {
                    // 开启监视每一个元素
                    imageObserve.observe(img);
                });
            } else {
                alert("您的浏览器不支持IntersectionObserver!");
            }
        });
    </script>
</body>

</html>

注:需要考虑兼容性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值