简单实现图片懒加载原理!

<!--
 * @Description: 希望KEEP REAL
 * @Version: 版本更新中...
 * @Autor: AKAYangYi
 * @Date: 2020-08-13 01:04:13
 * @LastEditors: YangYi
 * @LastEditTime: 2020-08-13 01:41:16
-->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        html,
        body {
            height: 3000px;
        }

        img {
            vertical-align: middle;
        }
    </style>
</head>

<body>
    <div class="imgbox">

    </div>
</body>

</html>
<script>
    var arr = [
        "https://img.zcool.cn/community/015aa45f323cdda801215aa038e135.png@1380w",
        "https://img.zcool.cn/community/011e6e5f334da1a80120a8214fddbe.jpg@1380w",
        "https://img.zcool.cn/community/010c115f334deda80120a821b00ad1.jpg@1380w",
        "https://img.zcool.cn/community/01be425f302bfea801215aa011d7e3.jpg@1380w",
        "https://img.zcool.cn/community/011d4b5f323ccea80120a8219b7a37.png@1380w",
        "https://img.zcool.cn/community/015aa45f323cdda801215aa038e135.png@1380w",
        "https://img.zcool.cn/community/011e6e5f334da1a80120a8214fddbe.jpg@1380w",
        "https://img.zcool.cn/community/010c115f334deda80120a821b00ad1.jpg@1380w",
        "https://img.zcool.cn/community/01be425f302bfea801215aa011d7e3.jpg@1380w",
        "https://img.zcool.cn/community/011d4b5f323ccea80120a8219b7a37.png@1380w",
    ];
    function _(ele) {
        ele = document.querySelectorAll(ele);
        if (ele.length === 1) {
            return ele[0];
        } else if (ele.length > 1) {
            return [].slice.call(ele);
        } else {
            return null;
        }
    }

    function render() {
        //创建该有的图片容器
        var box = document.createDocumentFragment();
        for (var i = 0; i < arr.length; i++) {
            var img = document.createElement("img");
            img.setAttribute("data-src", arr[i]);
            box.appendChild(img);
        }
        _(".imgbox").appendChild(box);
    }
    render();
    window.onload = function () {
        var flag = true;
        //一张图片的高度
        var imgonce = 350;
        var w_height = window.innerHeight;
        //当页面没有滚动的时候 初始渲染 在页面可是范围的图片
        if (flag) {
            var max_count = Math.floor(w_height / imgonce);
            renderimg(max_count);
        }
        window.addEventListener("scroll", function () {
            var scrolltop = document.body.scrollTop || document.documentElement.scrollTop;
            if (!scrolltop) return false;
            flag = false;
            max_count = Math.ceil((w_height + scrolltop) / imgonce);
            setTimeout(function () {
                renderimg(max_count)
            }, 2000);
        })
    }
    //渲染图片  只有出现在当前的页面才会显示
    function renderimg(count) {
        if (count > arr.length) return false;
        for (var i = 0; i < count; i++) {
            _(".imgbox > img")[i].src = _(".imgbox > img")[i].getAttribute("data-src")

        }
    }
</script>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript懒加载(Lazy Loading)是一种优化网页性能的技术,它可以延迟加载某些资源,比如图片、视频、音频等,直到它们需要被展示在屏幕上时再进行加载。这样可以减少初始页面的加载时间,提高用户体验。 懒加载的原理是通过JavaScript动态地向页面中添加元素,这些元素在初始时不会加载,当用户滚动页面,元素出现在可视区域内时再进行加载。这个过程可以通过监听滚动事件来实现。 以下是一个简单的懒加载实现的示例代码: 1. 在HTML中添加需要延迟加载的元素,比如图片 ```html <img class="lazy" data-src="example.jpg" alt="Example"> ``` 2. 使用JavaScript监听页面滚动事件,在元素出现在可视区域内时添加src属性来触发加载 ```javascript function lazyLoad() { var lazyImages = document.querySelectorAll('.lazy'); lazyImages.forEach(function(img) { if (img.getBoundingClientRect().top < window.innerHeight) { img.src = img.dataset.src; img.classList.remove('lazy'); } }); } document.addEventListener('scroll', lazyLoad); ``` 在这个示例中,我们使用了querySelectorAll()方法来获取所有有“lazy”类的元素,然后在滚动事件中遍历这些元素。如果元素的位置小于窗口的可视高度,就将data-src属性赋值给src属性来触发加载,并将“lazy”类从元素中移除。 注意,这只是一个简单的懒加载实现示例,实际应用中需要考虑更多的细节,比如优化滚动事件的性能、处理图片的加载失败等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值