首页 > 其他分享 >防抖节流的区别 怎么实现防抖节流

防抖节流的区别 怎么实现防抖节流

时间:2022-11-29 16:44:58浏览次数:46  
标签:box function 防抖 throttle 节流 触发 区别

防抖节流区别 怎么实现的   防抖:指在触发事件后n秒内函数只执行一次(确定不在更改时执行) 如果在n秒内再次被触发则时间会被重新计算 如:王者里面的回城 如果回城终端 则会重新计算回城时间 使用什么实现:使用闭包实现 或者lodash(使用时引入js插件)_.throttle(func函数, [wait=0等待时间], [options=这个参数可有可无])
节流:在既定时间内连续多次触发事件时 不会重新计算时间 而是将本次执行的时间 执行完成后才会再次被触发 如:短信验证码倒计时 在验证码出发后再点击也是无效的 倒计时时间不会被重新计算 而是等在既定的时间内执行完后才能再次被触发 使用什么实现:使用闭包 或者loadsh插件_.debounce(func, [wait=0], [options=])
防抖节流区别:防抖在既定时间内 再次被触发后重新计算时间 再执行 而节流连续触发不会重新计算时间 只有既定时间结束后才会被再次触发事件

<title>Document</title>
    <style>
      .box {
        width: 500px;
        height: 500px;
        background-color: #ccc;
        color: #fff;
        text-align: center;
        font-size: 100px;
      }
    </style>
  </head>

  <body>
    <div class="box"></div>
    <script>
       使用闭包来实现节流

      // 节流:连续触发事件 但在设定时间内只会执行一次(如:短信验证码)
      // 防抖:指在触发事件在n秒内只执行一次 如果在n秒内再次出发 则会重新计算时间(如:王者中的回城)

      let i = 0;
      const box = document.querySelector(".box");
      function renderMove() {
        box.innerHTML = i++;
      }
      // 没有节流时 动一下就会改变一下数字 开启节流阀后 在1秒后才会触发一次
      box.addEventListener("mousemove", throttle(renderMove, 1000));
      // 节流 0-2 时间内会加1 (约定一个时间范围只会执行一次)
      function throttle(fn, time) {
        let start = 0;
        function fun() {
          let now = +new Date();
          if (now - start >= time) {
            // 重新调用函数
            fn();
            start = now;
            console.log(start);
          }
        }
        return fun;
      }
      console.log(throttle(renderMove, 1000));
    </script>
  </body>
 <title>Document</title>
    <style>
      .box {
        width: 500px;
        height: 500px;
        background-color: #ccc;
        color: #fff;
        text-align: center;
        font-size: 100px;
      }
    </style>
  </head>

  <body>
    <div class="box"></div>
    <script>
      使用闭包实现防抖
      const box = document.querySelector(".box");
      let i = 0;
      // 渲染函数 将事件函数里面的函数抽离出来
      function render() {
        box.innerHTML = i++;
      }
      box.addEventListener("mousemove", antiShake(render, 200));

      function antiShake(fn, time) {
        let timeId; //undefined 定时器的名字
        return function () {
          if (timeId) {
            // 清除之前的定时器 重新经计时
            clearTimeout(timeId);
          }
          //定时器
          timeId = setTimeout(function () {
            fn();
          }, time);
        };
      }
    </script>
  </body>

 

 <title>Document</title>
    <style>
      .box {
        width: 500px;
        height: 500px;
        background-color: #ccc;
        color: #fff;
        text-align: center;
        font-size: 100px;
      }
    </style>
  </head>

  <body>
    <div class="box"></div>
    <!-- 引入js插件 -->
    <script src="./lodash.min.js"></script>
    <script>
       使用lodas插件来实现防抖节流
      const box = document.querySelector(".box");
      let i = 0;
      function mouseMove() {
        box.innerHTML = ++i;
      }
      // 防抖 _.debounce(func, [wait=0],    [options=])
      // box.addEventListener("mousemove", _.debounce(mouseMove, 500));
      // 节流_.throttle(func, [wait=0], [options=])
      box.addEventListener("mousemove", _.throttle(mouseMove, 1000));
    </script>
  </body>

 

标签:box,function,防抖,throttle,节流,触发,区别
From: https://www.cnblogs.com/JAG2671169285/p/16935802.html

相关文章

  • utf-8,utf-16-utf-32有什么区别?
    问题:utf-8,utf-16-utf-32有什么区别?解答:为了解决计算机可以识别所有国家文字的问题,有个老大哥(国际组织)统一了所有编码。但是遗留一个问题,就是说实际编码如何实现......
  • DML和DDL区别
    参考:https://www.leixue.com/ask/what-is-the-difference-between-ddl-and-dmlDDL(DataDefinitionLanguage)数据定义语言DML(DataManipulationLanguage)数据操纵语言......
  • 工业相机中 线扫与面阵区别
    线阵相机:它的传感器只有一行感光元素,因此使高扫描频率和高分辨率成为可能。线阵相机的典型应用领域是检测连续的材料,例如金属、塑料、纸和纤维等。被检测的物体通常匀速运......
  • 【拓展】什么是Deno?跟Node.js有何区别?
    原文:What’sDeno,andhowisitdifferentfromNode.js?(https://blog.logrocket.com/what-is-deno/)Node.js的作者RyanDahl,过去一年半的时间都在打造一个新的JavaScrip......
  • vue3响应式原理以及ref和reactive区别还有vue2/3生命周期的对比,第二天
    前言:前天我们学了ref和reactive,提到了响应式数据和Proxy,那我们今天就来了解一下,vue3的响应式在了解之前,先复习一下之前vue2的响应式原理vue2的响应式:原理:对......
  • 防抖 & 节流
    防抖&节流防抖:连续触发事件,但在规定时间内,只会触发一次详细解说:规定时间为2000ms,在这个时间内,如果多次触发事件,会终止上一次没有执行完的操作,重新开始计时,最终也只会......
  • C语言中 char s[] 和 char* s 的区别
    chars[]和char*s的区别1、数组本质2、指针指针的指向3、字符数组4、char*与chara[]5、char**和char*a[]char*a[]char**sC语言指针可......
  • Css单位rem和em的区别
    remrootem:root{}根选择器->html{}1rem=根元素字体大小(font-size)emem相对长度单位,相对于父元素的长度单位(font-size)先找自身的font-size,再找父元素的font-......
  • 订阅发布模式和观察者模式区别
    1.发布/订阅模式发布/订阅模式订阅者发布者信号中心我们假定,存在一个"信号中心",某个任务执行完成,就向信号中心"发布"(publish)一个信号,其他任务可以向信号中......
  • (转) - Mysql key和index区别
    MySQL索引的概念  索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前......