JavaScript常用工具函数——节流

119 阅读1分钟

什么是节流?

当我们在执行某个连续操作时,例如输入框中输入内容进行搜索,我们并不希望每输入一个字符就去触发一次将请求,这时我们可以通过某种手段去减少请求发送的次数,这个就是节流。节流就是控制事件触发的次数

节流的使用场景

  • scroll事件,每隔一段时间去计算一次位置信息
  • input输入框实时搜索并发送请求获取数据,我们每隔2s发送一次请求。
  • ...................等

如何实现节流?

根据节流的原理,我们通过计算本次与上次事件触发的时间间隔,如果这个间隔大于了我们设定的间隔时间,就去发送一次请求。

代码如何实现?

如下:

<!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>节流</title>
</head>
<body>
    <input type="text" />
    <!-- 使用场景
        滚动scroll事件,每隔1s进行一次位置计算
        input输入框实时搜索并发送请求展示下拉列表,每隔1s发送一次请求
    -->
    <script>
        // 节流:减少一段时间内事件的触发频率,例如:2s发一次请求;
        // 只有当上一次触发时间和这次触发时间间隔大于2s之后才会去发送一次请求
        let ipt = document.querySelector("input");

        const throttle = (()=> {
            let lastTime = 0;
            return ((callback, time = 800)=> {
                // 获取本次事件触发的时间戳
                let nowTime = new Date();
                if (nowTime - lastTime > time) {
                    callback();
                    lastTime = nowTime;
                }
            })
        })();

        ipt.addEventListener("input", function () {
            throttle(()=> {
                if (ipt.value == "") {
                    return;
                }
                // 发送请求
                console.log(ipt.value)
            },2000)
            
        })

    </script>
</body>
</html>