函数节流

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            height: 10000px;
        }
    </style>
</head>
<body>
    <div></div>
    

    <script>
        function throttle(fn, wait) {
            let _fn = fn, // 保存需要被延迟的函数引用
                timer,
                flags = true; // 是否首次调用

            return function() {
                let args = arguments,
                    self = this;
                if (flags) { // 如果是第一次调用不用延迟,直接执行即可
                    _fn.apply(self, args);
                    flags = false;
                    return flags;
                }
                // 如果定时器还在,说明上一次还没执行完,不往下执行
                if (timer) return false;
                timer = setTimeout(function() { // 延迟执行
                    clearTimeout(timer); // 清空上次的定时器
                    timer = null; // 销毁变量
                    _fn.apply(self, args)
                }, wait)
            }
        }

        window.onscroll = throttle(function() {
            console.log(22)
        }, 500)
    </script>
</body>
</html>

 

posted @ 2020-03-09 16:08  史海莹  阅读(92)  评论(0编辑  收藏  举报