实现懒加载

简介: 实现懒加载

需要用到一个属性:data-src

通俗一点: 1、就是创建一个自定义属性data-src存放真正需要显示的图片路径,而img自带的src放一张大小为1 * 1px的图片路径。 2、当页面滚动直至此图片出现在可视区域时,用js取到该图片的data-src的值赋给src。

let jiazai = document.getElementById('jiazai');
            // 建立观察者
            let ob = new IntersectionObserver(function(entries) {
                var entry = entries[0];
                if (entry.isIntersecting) {
                    console.log('加载更多')
                }
            }, {
                thresholds: 0.1
            })
            // 观察者
            ob.observe(jiazai)
            // onload是等所有的资源文件加载完毕以后再绑定事件
            window.onload = function() {
                // 获取图片列表,即img标签列表
                var imgs = document.querySelectorAll('img');
                // 获取到浏览器顶部的距离
                function getTop(e) {
                    return e.offsetTop;
                }
                // 懒加载实现
                function lazyload(imgs) {
                    // 可视区域高度
                    var h = window.innerHeight;
                    //滚动区域高度
                    var s = document.documentElement.scrollTop || document.body.scrollTop;
                    for (var i = 0; i < imgs.length; i++) {
                        //图片距离顶部的距离大于可视区域和滚动区域之和时懒加载
                        if ((h + s) > getTop(imgs[i])) {
                            // 真实情况是页面开始有2秒空白,所以使用setTimeout定时2s
                            (function(i) {
                                setTimeout(function() {
                                    // 不加立即执行函数i会等于9
                                    // 隐形加载图片或其他资源,
                                    //创建一个临时图片,这个图片在内存中不会到页面上去。实现隐形加载
                                    var temp = new Image();
                                    temp.src = imgs[i].getAttribute('data-src'); //只会请求一次
                                    // onload判断图片加载完毕,真是图片加载完毕,再赋值给dom节点
                                    temp.onload = function() {
                                        // 获取自定义属性data-src,用真图片替换假图片
                                        imgs[i].src = imgs[i].getAttribute('data-src')
                                    }
                                }, 2000)
                            })(i)
                        }
                    }
                }
                lazyload(imgs);
                // 滚屏函数
                window.onscroll = function() {
                    lazyload(imgs);
                }
            }
相关文章
|
2月前
|
API 开发者
懒加载的实现
懒加载的实现
187 57
|
3月前
|
前端开发 JavaScript
3分钟掌握!用HTML+CSS实现懒加载,真的这么简单?
3分钟掌握!用HTML+CSS实现懒加载,真的这么简单?
|
3月前
|
存储 JavaScript UED
图片懒加载
图片懒加载
|
5月前
懒加载和无限滚动
懒加载和无限滚动
|
存储 JavaScript API
Vue3实现图片懒加载及自定义懒加载指令
Vue3实现图片懒加载及自定义懒加载指令
629 0
|
6月前
在实现路由懒加载和按需加载时,需要注意哪些问题?
在实现路由懒加载和按需加载时,需要注意哪些问题?
31 1
|
11月前
|
存储
图片懒加载(二)
图片懒加载(二)
48 1
|
数据采集 搜索推荐 UED
实现懒加载
懒加载是一种非常 useful 的技术,可以极大提高用户体验和网页性能,但也有一定的弊端,需要权衡选择。一般来说,对于加载的数据较多,页面性能和流量较为关注的场景,懒加载是一个不错的方案。但如果对 SEO 优化要求较高,或者加载的数据较少,也可以不使用懒加载
73 0
懒加载只能对图片进行懒加载吗?
懒加载只能对图片进行懒加载吗?