JS中实现防抖和节流的简单demo

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      .wrapper {
        width: 800px;
        height: 600px;
      }
      .wrapper div {
        float: left;
        width: 400px;
        height: 100%;
        box-sizing: border-box;
        border: 1px solid black;
      }
    </style>
  </head>
  <body>
    <div class="wrapper">
      <div class="left"></div>
      <div class="right"></div>
    </div>
    <script>
      // 窗口大小改变属于高频次触发事件
      window.onresize = function() {
        debounce(leftText, 300);
        throttle(rightText, 1000);
      };

      // 向左侧的div中写入内容的函数
      function leftText() {
        let leftObj = document.querySelector(".left");
        leftObj.innerHTML += "<p>1</p>";
      }

      // 向右侧的div中写入内容的函数
      function rightText() {
        let rightObj = document.querySelector(".right");
        rightObj.innerHTML += "<p>1</p>";
      }

      // 防抖函数的写法
      function debounce(fn, time) {
        if (fn.timeid) {
          clearTimeout(fn.timeid);
        }
        fn.timeid = setTimeout(() => {
          fn();
        }, time);
      }

      // 节流函数的写法
      var startTime = 0; // 记录每个循环的开始时间
      function throttle(fn, time) {
        let currTime = +new Date(); // 每次执行时,获取系统的当前时间

        clearTimeout(fn.timeid); // 当在规定的时间间隔内,再次执行代码时,清楚上一次的定时器

        if (!startTime) {
          startTime = currTime;
        }

        // 如果当前时间与此次循环开始的时间间隔比规定的大时,执行一次函数
        if (currTime - startTime > time) {
          console.log(currTime - startTime);
          fn();
          startTime = currTime;
        }

        fn.timeid = setTimeout(() => {
          fn();
        }, time);
      }
    </script>
  </body>
</html>

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 如此,便可放手了。
    MiNi沐阅读 1,292评论 0 0
  • 图中穿蓝色衣服的小女孩,她的名字叫郑书琦。是我们夏令营第一个到的孩子。看见她很平静的跟爸爸妈妈挥手告别的神态,内心...
    殷琴阅读 1,841评论 0 4
  • ――致DQH 我极目望着远方 那是你的方向 即使我知道 无论怎样...
    林春爻阅读 3,146评论 1 1
  • 在旅途中很难有安定的感觉,在一个又一个旅店暂歇,虽然也有热水和wifi,毕竟不如洁净自在的家。 然而我想,真正的所...
    噌噌噌噌噌阅读 4,221评论 0 10

友情链接更多精彩内容