实现懒加载

简介: 实现懒加载

需要用到一个属性: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);
                }
            }
相关文章
|
JSON 数据格式 Python
Python json中一直搞不清的load、loads、dump、dumps、eval
Python json中一直搞不清的load、loads、dump、dumps、eval
849 0
Python json中一直搞不清的load、loads、dump、dumps、eval
|
Web App开发 JavaScript iOS开发
[√]使用vscode开发油猴Tampermonkey脚本
[√]使用vscode开发油猴Tampermonkey脚本
1982 0
|
5月前
|
数据采集 数据可视化 JavaScript
用 通义灵码和 PyQt5 爬虫智能体轻松爬取掘金,自动化采集技术文章和数据
本文介绍了如何利用智能开发工具通义灵码和Python的PyQt5框架,构建一个自动化爬取掘金网站技术文章和数据的智能爬虫系统。通过通义灵码提高代码编写效率,使用PyQt5创建可视化界面,实现对爬虫任务的动态控制与管理。同时,还讲解了应对反爬机制、动态内容加载及数据清洗等关键技术点,帮助开发者高效获取并处理网络信息。
|
4月前
|
JSON 安全 API
Python处理JSON数据的最佳实践:从基础到进阶的实用指南
JSON作为数据交换通用格式,广泛应用于Web开发与API交互。本文详解Python处理JSON的10个关键实践,涵盖序列化、复杂结构处理、性能优化与安全编程,助开发者高效应对各类JSON数据挑战。
315 1
|
4月前
|
IDE API 开发工具
Python类型注解:让代码“开口说话”的隐形助手
Python类型注解为动态语言增添类型信息,提升代码可读性与健壮性。通过变量、函数参数及返回值的类型标注,配合工具如mypy、IDE智能提示,可提前发现类型错误,降低调试与协作成本。本文详解类型注解的实战技巧、生态支持及最佳实践,助你写出更高质量的Python代码。
207 0
|
9月前
|
人工智能 Prometheus 监控
监控vLLM等大模型推理性能
本文将深入探讨 AI 推理应用的可观测方案,并基于 Prometheus 规范提供一套完整的指标观测方案,帮助开发者构建稳定、高效的推理应用。
1396 169
监控vLLM等大模型推理性能
|
10月前
|
人工智能 大数据
阿里云云计算ACA、大数据ACA、人工智能ACA三门认证升级调整公告
阿里云云计算ACA、大数据ACA、人工智能ACA三门认证升级调整公告
|
安全 大数据
什么是高匿代理,与普匿和透明代理的区别是什么?它有什么作用?
什么是高匿代理,与普匿和透明代理的区别是什么?它有什么作用?
|
JavaScript 前端开发 API
JavaScript动态渲染页爬取——Playwright的使用(二)
JavaScript动态渲染页爬取——Playwright的使用(二)
720 1
|
缓存 运维 应用服务中间件
运维系列.Nginx:自定义错误页面(二)
运维系列.Nginx:自定义错误页面(二)
305 0