JS懒加载 -- 适用于商城主页商品懒加载、图片懒加载,算法简单、易于理解、萌新福音

简介: JS懒加载 -- 适用于商城主页商品懒加载、图片懒加载,算法简单、易于理解、萌新福音

       懒加载?什么是懒加载?・ࡇ・ ?

       很多萌新刚见到这个词时一定一头雾水,懒加载也叫做延迟加载、按需加载,指的是在长网页中延迟加载图片数据,是一种较好的网页性能优化的方式。在比较长的网页或应用中,如果内容很多,所有的内容都被加载出来,而用户只能看到可视窗口的那一部分图片数据,这样就浪费了性能。

       通俗来讲就是优化网页,使其更高效 (♡ര‿ര)

所以今天就教大家如何使用JS代码来实现懒加载的效果

       | ू•ૅω•́)ᵎᵎᵎ 开始演示:

创建html文件(我用的HbuildX演示)

然后创建html结构:

<div id="box">
  <div id="content"></div>
</div>
<p class="hint">正在加载中。。。</p>

然后是CSS样式:

<style>
      *{
        margin: 0;
        padding: 0;
      }
      #content{
        width: 100%;
        height: 200px;
        background-color: #1ACFFC;
        margin: 10px 0;
      }
      #hint{
        width: 100%;
        height: 30px;
        text-align: center;
        background-color: #F9CFCD;
      }
    </style>

当前效果(这里加了移动端适配):

下面就开始JS部分了ԅ(≖‿≖ԅ)

       假设data为数据总数,num为每次显示条数,那么我们一步一步来,先获取元素,将基础的5条渲染出来

<script>
      // 数据总数
      let data = 23
      // 一次显示的数量
      let num = 5
      // 获取页面父元素
      let box = document.getElementById("box")
      renders()
      // 页面渲染函数
      function renders(){
        let str = ''
        for(let i = 0 ; i < num ; i++){
          str += `<div id="content"></div>`
        }
        box.innerHTML = str
      }
    </script>

效果:

接下来就是如何渲染剩余的数据,和如何限制数据渲染,实现懒加载效果

一步一步来:首先添加scroll事件

// 给window添加事件监听,监听scroll事件
window.addEventListener("scroll",lazyLoad)

       窗口可视区域的高+滚动条滚动的高度 是否大于或等于网页整体内容的高度,如果大于,num数量增加,也就是划到底渲染剩余的内容,每次数量增加都要清除事件监听,以防止滚动事件重复触发

// 事件内容
      function lazyLoad() {
        // 窗口可视区域的高+滚动条滚动的高度 是否大于或等于网页整体内容的高度
        if (window.scrollY + window.innerHeight > document.body.scrollHeight) {
          num += 5
          if (num >= data) {
            num = data;
          }
          window.removeEventListener("scroll", ;lazyload);
        }
      }

       清除后,设置定时器,一秒后再将新的div数量渲染出来,并且判断渲染的数量是否等于总和的数量,如果不等于,说明还有没渲染出来的div,所以重新给wiindow绑定事件监听的scroll事件。

       若相等,说明全部渲染完毕,将尾部提示信息改为“暂无更多商品”

// 事件内容
      function lazyLoad() {
        // 窗口可视区域的高+滚动条滚动的高度 是否大于或等于网页整体内容的高度
        if (window.scrollY + window.innerHeight > document.body.scrollHeight) {
          num += 5
          if (num >= data) {
            num = data;
          }
          window.removeEventListener("scroll", lazyLoad);
          // 添加定时器
          setTimeout(function() {
            renders();
            if (num != data) {
              window.addEventListener("scroll", lazyLoad);
            } else {
              document.getElementById("hint").innerHTML = "暂无更多商品"
            }
          }, 1000)
        }
      }

效果如下:

完整代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport"
      content="width=device-width,initial-scale=1.0,minimum-scale=1.0,
            maximum-scale=1.0,user-scalable=no">
    <title></title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      #content {
        width: 100%;
        height: 200px;
        background-color: #1ACFFC;
        margin: 10px 0;
      }
      #hint {
        width: 100%;
        height: 30px;
        text-align: center;
        background-color: #F9CFCD;
      }
    </style>
  </head>
  <body>
    <div id="box">
      <div id="content"></div>
    </div>
    <p id="hint">正在加载中。。。</p>
    <script>
      // 数据总数
      let data = 23
      // 一次显示的数量
      let num = 5
      // 获取页面父元素
      let box = document.getElementById("box")
      renders()
      // 页面渲染函数
      function renders() {
        let str = ''
        for (let i = 0; i < num; i++) {
          str += `<div id="content"></div>`
        }
        box.innerHTML = str
      }
      // 给window添加事件监听,监听scroll事件
      window.addEventListener("scroll", lazyLoad)
      // 事件内容
      function lazyLoad() {
        // 窗口可视区域的高+滚动条滚动的高度 是否大于或等于网页整体内容的高度
        if (window.scrollY + window.innerHeight > document.body.scrollHeight) {
          num += 5
          if (num >= data) {
            num = data;
          }
          window.removeEventListener("scroll", lazyLoad);
          // 添加定时器
          setTimeout(function() {
            renders();
            if (num != data) {
              window.addEventListener("scroll", lazyLoad);
            } else {
              document.getElementById("hint").innerHTML = "暂无更多商品"
            }
          }, 1000)
        }
      }
    </script>
  </body>
</html>

(Ps:作者纯新人,本文仅用来分享所学知识并加以运用,若有什么错误,还恳请路过的大佬多多批评(♡ര‿ര))

目录
相关文章
|
3月前
|
前端开发 JavaScript 容器
制作b超单生成器, 假怀孕b超单图片制作, p图医院证明【css+html+js装逼恶搞神器】
本资源提供一个适合用于熟人之间恶搞的工具,效果逼真,仅供学习参考与娱乐。包含前端技术学习要点:语义化布局、响应式设计、Flexbox、图片自适应
|
4月前
|
监控 算法 JavaScript
基于 JavaScript 图算法的局域网网络访问控制模型构建及局域网禁止上网软件的技术实现路径研究
本文探讨局域网网络访问控制软件的技术框架,将其核心功能映射为图论模型,通过节点与边表示终端设备及访问关系。以JavaScript实现DFS算法,模拟访问权限判断,优化动态策略更新与多层级访问控制。结合流量监控数据,提升网络安全响应能力,为企业自主研发提供理论支持,推动智能化演进,助力数字化管理。
104 4
|
4月前
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
117 3
|
4月前
|
存储 监控 算法
公司内部网络监控中的二叉搜索树算法:基于 Node.js 的实时设备状态管理
在数字化办公生态系统中,公司内部网络监控已成为企业信息安全管理体系的核心构成要素。随着局域网内终端设备数量呈指数级增长,实现设备状态的实时追踪与异常节点的快速定位,已成为亟待解决的关键技术难题。传统线性数据结构在处理动态更新的设备信息时,存在检索效率低下的固有缺陷;而树形数据结构因其天然的分层特性与高效的检索机制,逐渐成为网络监控领域的研究热点。本文以二叉搜索树(Binary Search Tree, BST)作为研究对象,系统探讨其在公司内部网络监控场景中的应用机制,并基于 Node.js 平台构建一套具备实时更新与快速查询功能的设备状态管理算法框架。
120 3
|
6月前
|
监控 算法 JavaScript
企业用网络监控软件中的 Node.js 深度优先搜索算法剖析
在数字化办公盛行的当下,企业对网络监控的需求呈显著增长态势。企业级网络监控软件作为维护网络安全、提高办公效率的关键工具,其重要性不言而喻。此类软件需要高效处理复杂的网络拓扑结构与海量网络数据,而算法与数据结构则构成了其核心支撑。本文将深入剖析深度优先搜索(DFS)算法在企业级网络监控软件中的应用,并通过 Node.js 代码示例进行详细阐释。
111 2
|
6月前
|
存储 算法 JavaScript
基于 Node.js 深度优先搜索算法的上网监管软件研究
在数字化时代,网络环境呈现出高度的复杂性与动态性,上网监管软件在维护网络秩序与安全方面的重要性与日俱增。此类软件依托各类数据结构与算法,实现对网络活动的精准监测与高效管理。本文将深度聚焦于深度优先搜索(DFS)算法,并结合 Node.js 编程语言,深入剖析其在上网监管软件中的应用机制与效能。
90 6
|
6月前
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
234 2
|
10月前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
157 1
JavaScript中的原型 保姆级文章一文搞懂
|
10月前
JS+CSS3文章内容背景黑白切换源码
JS+CSS3文章内容背景黑白切换源码是一款基于JS+CSS3制作的简单网页文章文字内容背景颜色黑白切换效果。
97 0

热门文章

最新文章