zoukankan      html  css  js  c++  java
  • js函数防抖与节流总结

    函数防抖 

    频繁触发,只在特定的时间内执行一次代码。

    应用场景:onrize,onscroll等频繁触发的函数,比如你想获取滚动条的位置,然后执行下一步动作 

    //函数防抖 
    function debounce(fn,delay){
        let timer = null;
        return function (){
            let args = arguments;
            if(timer) clearTimeout(timer);
           timer = setTimeout(()=>{
                fn.apply(this,args)
            },delay)
        }
    }
    

    函数节流

    频繁触发,但只在特定的时间内没有再次触发执行函数,函数才会真的去执行。

    应用场景:输入框自动补全时间,频繁操作点赞取消点赞等。

    function throttle(fn,delay){
        let timer = null;
        return function(){
            let args = arguments;
            if(timer) return;
            timer = setTimeout(()=>{
                fn.apply(this,args)
                timer = null;
            },delay)
        }
    }

    事例

    <body>
        <button id="btn1">普通点击</button>
        <button id="btn2">防抖点击</button>
        <button id="btn3">节流点击</button>
    </body>
    
    //普通点击
    let btn1 = 0;
    document.getElementById('btn1').onclick = function() {
        console.log(btn1++)//点击多少次,打印多少次
    }
    
    //防抖点击
    let btn2 = 0;
    function fnBtn2(b) {
        btn2++;
        console.log(btn2,b)
    }
    let b2 = debounce(fnBtn2, 3000);//函数初始化
    document.getElementById('btn2').onclick = function() {
        b2('b2')//3s之内停止点击才会执行
    }
    
    //节流点击
    let btn3 = 0;
    function fnBtn3(b) {
        btn3++;
        console.log(btn3,b)
    }
    let b3 = throttle(fnBtn3, 3000);//函数初始化
    document.getElementById('btn3').onclick = function() {
        b3('b3')//无论点击多少次,只会每3s执行一次
    }
    愿你走出半生,归来仍是少年
  • 相关阅读:
    openCV学习——一、图像读取、显示、输出
    caffe配置文件
    5.卷积神经网络
    【caffe】基本数据结构blob
    URLSearchParams对象
    window.history对象
    在React项目中添加ESLint
    memorization-根据输入重新计算render的数据
    React重置非受控组件state的方法
    彻底搞清楚DOM元素的height,offsetHeight,clientHeight,scrollHeight
  • 原文地址:https://www.cnblogs.com/yz-blog/p/14538022.html
Copyright © 2011-2022 走看看