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执行一次
    }
    愿你走出半生,归来仍是少年
  • 相关阅读:
    HTTP长连接、短连接使用及测试
    递归分治算法之二维数组二分查找(Java版本)
    Java二维数组的概念和使用方法
    java二维数组遍历
    HashMap多线程并发问题分析
    Linux 移动或重命名文件/目录-mv 的10个实用例子
    CSS fixed 定位元素失效的问题
    关于 JavaScript 中的继承
    React 虚拟 DOM 的差异检测机制
    下拉框中选项的快速定位
  • 原文地址:https://www.cnblogs.com/yz-blog/p/14538022.html
Copyright © 2011-2022 走看看