首页 > 其他分享 >浅谈js防抖和节流

浅谈js防抖和节流

时间:2023-03-05 23:58:55浏览次数:43  
标签:防抖 浅谈 timer js 节流 input fn wait

防抖和节流是处理高频触发最常见的优化方式,对性能提升有很大的帮助。

防抖:将多次的高频操作优化为只在最后一次执行,应用场景如:输入框,只需在最后一次输入进行校验即可。

节流:保证每隔一段时间只执行一次,降低触发的频率,将高频操作优化成低频操作。应用场景如:添加表单、滚动条事件、resize事件等高频监听事件。

 

 
防抖的代码:

 <input placeholder="请输入手机号" />

    <script>
        // 获取input对象
        let inp = document.querySelector('input');
        // 监听input值的变化
        inp.addEventListener('input', antiShake(animal, 2000))
        // 封装防抖方法
        function antiShake(fn, wait){ // fn:执行的函数,wait:设置的时间
            let timeSet = null;
            return args => {
                if(timeSet) clearTimeout(timeSet)
                timeSet =  setTimeout(fn, wait);
            }
        }
        function animal(){
            console.log("一条小狗");
        }
    </script>
       <style>
        .box {
           width: 200px;
           height: 200px;
           background-color: greenyellow; 
        }
    </style>
   // 鼠标按住移动触发事件   
    <div class="box"></div>
  let box = document.querySelector('.box');
        box.addEventListener("touchmove", throttle(run, 2000))

        function throttle(fn, wait) {
            let timer = null;
            return args => {
                if(!timer) {
                    timer = setTimeout(() => {
                        fn();
                        // 将timer释放
                        timer = null;
                    }, wait)
                }
            }
        }
        function run () {
            console.log("它在跑")
        }
        

区别:

防抖:在固定的时间内,时间只允许发生一次

节流:在一定的时间内,多个操作合并为一个,就比如:将水龙头的水流放小了一样

标签:防抖,浅谈,timer,js,节流,input,fn,wait
From: https://www.cnblogs.com/xytx906/p/17182216.html

相关文章

  • js export default problems All In One
    jsexportdefaultproblemsAllInOneproblems潜在的bug维护成本不同人代码的命名不一致solutionnamedexportdemosexportdefault......
  • fastjsonBasicDataSource链分析
    fastjsonBasicDataSource链分析(fastjson<=1.2.36)此利用链只能应用于fastjson<=1.2.36,在1.2.37版本中,直接去掉了key.toString方法。前置知识:首先我们看一下com.sun.or......
  • 汇编指令学习(JMP、JE、JS、JP,JO,J*b)
    一、JMP无条件跳转不用看标志位,jmp后面跟一个内存地址,直接跳转到该地址jmp0x0046B994二、JE(JZ)条件跳转当ZF标致为1的时候发生跳转,为0的时候不跳转,可以双击标志位,进行判断je......
  • 【基数排序算法详解】Java/Go/Python/JS/C不同语言实现
    说明基数排序(RadixSort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的......
  • napi 基于rust 开发nodejs addons 的框架
    目前基于rust开发nodejsaddons的框架是很多了,而且都不错,同时对于安装会基于跨平台构建+githubrelease模式进行安装(对于企业内部不是很友好)napi是一个新的基于rust的......
  • fastjson修改json的时间转换,包含递归json子集的时间
    JSONDateMatchersEnum时间格式枚举类packageconvert;publicenumJSONDateMatchersEnum{DEFAULT_MATCHER("yyyy-MM-ddHH:MM:ss","^((((1[6-9]|[2-9]\\d)\\d{2})-(......
  • json转golang结构
    在Golang中,我们可以使用标准库中的encoding/json包来将JSON数据转换为结构体。本文将介绍如何使用该包将JSON数据转换为Golang结构体。首先,让我们看一下JSON数据的格式。......
  • 浅谈二分标准模板以及边界变形
    1.5、搜索算法1.5.1、折半搜索(二分)二分的基础的用法是在单调序列或单调函数中进行查找。因此当问题的答案具有单调性时,就可以通过二分把求解转化为判定。1.5.1.1、标准......
  • node.js学习技巧
    --save===生产环境dependenciednpminstallxxxnpminstallxxx--savenpminstallxxx-Snpmixxx-S===开发环境devDependencies在devDependencies添加包......
  • IT0009.Vue.js核心技术解析与uni-app跨平台实战开发
    IT0009.Vue.js核心技术解析与uni-app跨平台实战开发  自己一面看一面跟着打的代码,蛮大,其实很多都是npm的modules链接:https://caiyun.139.com/m/i?0V5Cg5LbWDJWD ......