JS的防抖和节流

2022/03/06 JavaScript

防抖

固定的时间内,事件只允许发生一次,将多次操作变成一次
应用于输入框校验等

<!DOCTYPT html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>防抖</title>
</head>
<body>
    <h2>防抖</h2>
    <input placeholder="请输入电话" />
    <script>
        let telInput = document.querySelector('input')
        // telInput.addEventListener('input',(e)=>{
        //     console.log("发起请求")
        // })
        telInput.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("发起请求!")
        }
    </script>
</body>
<html>

节流

一定时间内只调用一次函数
应用场景:1、提交表单 2、高频监听事件

<!DOCTYPT html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>节流</title>
</head>
<style>
    .box{
        background-color: green;
        width: 200px;
        height: 200px;
    }
</style>
<body>
<div class="box"></div>
<script>
    let box = document.querySelector(".box")
    // box.addEventListener("touchmove",(e) => {
    //     console.log("发起请求!")
    // })
    // 移动端下的滑动操作
    box.addEventListener("touchmove",throttle(demo, 2000))
    // 利用延时或者时间戳
    function throttle(event, time){
        let timer = null
        return function() {
            if(!timer) {
                timer = setTimeout(() =>{
                    event()
                    timer = null
                }, time)
            }
        }
    }

    function demo(){
        console.log("发送请求!")
    }

    // 利用时间戳

</script>
</body>
<html>

Search

    逃离地球的Sandy

    logo of sandy

    Table of Contents