节流和防抖

83 阅读1分钟

节流代码

        //节流
        //定义一个节流阀,取值:true或false
        let flag = true;
        btn.addEventListener("click", function () {
            //判断节流阀的值为true,执行代码
            if (flag) {
                //满足条件后将节流阀改为false
                flag = false
                console.log("我是节流效果");
                
                //创建一个定时器,1s后将节流阀打开
                setTimeout(function () {
                    flag = true
                }, 1000)
            }
        })
        //可以发现效果,无论点的多快,这个按钮的点击输出,一直是匀速执行的,不受点击次数先找,每次点击完都要等下一次执行完才执行下一次点击的代码,总的来说就是点击速度越快,就能发现是匀速效果

防抖代码

    // 防抖
        // 定义全局变量定时器,赋值为空
        let temer = null;
        btn.addEventListener("click", function () {
            //每次点击都清除上一次定时器
            clearTimeout(temer)
            //创建一个定时器,赋上全局变量
            temer = setTimeout(function () {
                console.log("我是防抖效果");
            }, 1000)
        })
        // 运行完可以发现,传统的点击一次运行一次,在防抖里面,无论你在1秒内点的多块,它只在你点击超过1s的才执行,这样每次运行清除一下定时器就起到了防抖的效果,

完整代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="">
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
            text-decoration: none;
        }

        #__bs_notify__ {
            display: none !important;
        }

        /*上面的选择器不要删,否则内置预览会有个黑色的块,在下方写页面其他选择器*/
    </style>
</head>

<body>
    <button>点击按钮看控制台</button>
    <script>
        let btn = document.querySelector("button")


        // 防抖
        // 定义全局变量定时器,赋值为空
        let temer = null;
        btn.addEventListener("click", function () {
            //每次点击都清除上一次定时器
            clearTimeout(temer)
            //创建一个定时器,赋上全局变量
            temer = setTimeout(function () {
                console.log("我是防抖效果");
            }, 1000)
        })
        // 运行完可以发现,传统的点击一次运行一次,在防抖里面,无论你在1秒内点的多块,它只在你点击超过1s的才执行,这样每次运行清除一下定时器就起到了防抖的效果,




        //节流
        //定义一个节流阀,取值:true或false
        let flag = true;
        btn.addEventListener("click", function () {
            //判断节流阀的值为true,执行代码
            if (flag) {
                //满足条件后将节流阀改为false
                flag = false
                console.log("我是节流效果");


                //创建一个定时器,1s后将节流阀打开
                setTimeout(function () {
                    flag = true
                }, 1000)
            }
        })
        //可以发现效果,无论点的多快,这个按钮的点击输出,一直是匀速执行的,不受点击次数先找,每次点击完都要等下一次执行完才执行下一次点击的代码,总的来说就是点击速度越快,就能发现是匀速效果
    </script>
</body>

</html>