当前位置: 首页 > news >正文

几行代码,就写完懒加载啦?

Ⅰ、前言

  • 懒加载是网页中非常 常见的;
  • 为了减少系统的压力,对于一些电商系统出场频率非常高;
  • 那么大家一般用什么方式去实现 懒加载 呢 ?

在这里插入图片描述
① 通过 scroll 的形式:

通过 滚动scroll事件,然后去判断距离,当 距离到达一定范围,判断是否要加载资源;


② 通过 IntersectionObserver 的形式:

通过 元素与设备视窗或者其他指定元素发生交集的时候 => 最底部的元素滚动到视口时 ,判断是否要加载资源;

优势:

  • IntersectionObserver不像scroll事件触发那么频繁 , 对系统压力更小 ;
  • 不用计算距离,使用起来更加简单 ;

Ⅱ、概念与用法

  • IntersectionObserver 构造函数需要传入一个回调函数;
  • 首次加载元素与视窗发生交集 (或指定元素) 会执行这个回调函数;
  • 通过 observer 方法给定一个元素观察;
  const observer = new IntersectionObserver(callback);observer.observe(dom);

Ⅲ、用交叉观察器实现懒加载

  • 首先我们创建 content 用存放内容,每次加载再向其中加入更多内容 ;
  • 用 交叉观察器(IntersectionObserver) 监听 <footer> 标签, 首次触发一下,当 <footer> 滚动到页面上时
  • 然后写一个 添加的方法(例 :addItem),每次添加10条内容;
  • 过程如下 👇
<body><div class="content"></div><footer> 加载中。。。 </footer>
</body>
<script>const footer = document.getElementsByTagName('footer')[0]const observer = new IntersectionObserver((val) => {addItem();});observer.observe(footer);const content = document.getElementsByClassName('content')[0]let num = 0;function addItem() {for (let i = num; i < num+10; i++) {let node = document.createElement("div");node.innerText = `第${i+1}列`node.className = 'item'box.appendChild(content)}num = num + 10;}
</script>
  • 查看效果 👇

在这里插入图片描述

  • 再添加一点样式 ,完整例子 👇
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title>
</head>
<style>.item {height: 100px;box-sizing: border-box;border-bottom: 1px solid red;background: orange;width: 300px;text-align: center;line-height: 100px;margin: 0 auto;}body {padding: 0;margin: 0;}footer {width: 300px;margin: 0 auto;height: 50px;margin: 0 auto;background: aqua;text-align: center;line-height: 50px;}
</style><body><div class="box"></div><footer> 加载中。。。 </footer>
</body>
<script>const footer = document.getElementsByTagName('footer')[0]const observer = new IntersectionObserver((val) => {setTimeout(addItem, 300);});observer.observe(footer);const box = document.getElementsByClassName('box')[0]let num = 0;function addItem() {for (let i = num; i < num + 10; i++) {let node = document.createElement("div");node.innerText = `第${i + 1}列`node.className = 'item'box.appendChild(node)}num = num + 10;}
</script>
</html>

在这里插入图片描述

http://www.lryc.cn/news/11336.html

相关文章:

  • PyTorch常用的损失函数(ChatGPT)
  • LeetCode——1237. 找出给定方程的正整数解
  • 系统编程中的进程的概念No.3【进程状态】
  • 推荐 3 款 Golang 语义化版本库
  • Windows平台使用gdb连接qemu虚拟机上的系统
  • 【博客624】MAC地址表、ARP表、路由表(RIB表)、转发表(FIB表)
  • 【蓝桥日记⑤】2014第五届省赛(软件类)JavaA组❆答案解析
  • Leetcode.1139 最大的以 1 为边界的正方形
  • Bing+ChatGPT 对传统搜索引擎的降维打击
  • 【JS】数组常用方法总结-功能、参数、返回值
  • pytest 单元测试前后置处理
  • 汽车安全硬件扩展 AUTOSAR SHE SecureHardwareExtensions
  • 2023年美国大学生数学建模C题:预测Wordle结果建模详解+模型代码
  • 5、HAL库驱动W25Qxx
  • git rebase 洐合(变基)
  • Kubernetes 1.18学习笔记
  • AJAX技术
  • 华为OD机试 - 最大排列(JS)
  • Prometheus Docker安装及监控自身
  • 点云处理PCL常用函数与工具
  • FyListen 在 MVP 架构中的内存优化表现
  • Qt代码单元测试以及报告生成
  • vscode构建Vue3.0项目(vite,vue-cli)
  • 【2023】华为OD机试真题Java-题目0215-优雅数组
  • 通过Prowork每日自动提醒待处理工作任务
  • Linux自定义系统服务
  • mongodb lambda 查询插件
  • C++设计模式(16)——责任链模式
  • springmvc+jsp电影院购票售票选座推荐网站java ssm
  • ASEMI高压MOS管4N65SE,4N65SE参数,4N65SE特征