一、js防抖与节流

<!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>深入js防抖与节流</title>
    <style>
        .box {
            width: 200px;
            height: 200px;
            background-color: green;
        }
    </style>
</head>

<body>
    <h2>深入js防抖与节流</h2>
    <input type="text" placeholder="请输入名称">
    <div class="box"></div>
    <script>
        // 防抖 => 固定时间内,事件只允许发生一次
        let nameInput = document.querySelector('input')
        nameInput.addEventListener('input', antiShake(demo, 2000))
        // 防抖封装
        function antiShake(fn, wait) {
            let timeOut = null;
            return args => {
                if (timeOut) clearTimeout(timeOut)
                timeOut = setTimeout(fn, wait)
            }
        }

        function demo() {
            console.log('发起请求')
        }

        // 节流 => 保证一定时间内多个事件合并一个
        // 应用场景  => 1、提交表单 2、高频监听事件
        let box = document.querySelector(".box")
        box.addEventListener("touchmove", throttle(demo, 2000))

        function throttle(event, time) {
            let timer = null;
            return function () {
                if (!timer) {
                    timer = setTimeout(() => {
                        event()
                        timer = null
                    }, time)
                }

            }
        }
    </script>
</body>

</html>

 

posted @ 2022-03-17 16:45  他她  阅读(29)  评论(0编辑  收藏  举报