函数的防抖与节流

139 阅读1分钟

防抖

1.函数防抖 : 单位时间内,频繁触发事件,只会触发最后一次
2.经典应用场景 : 输入框输入事件 input事件。
作用:减少触发输入的频率,提高代码的性能
3.函数防抖流程 :
3.1 声明全局变量存储定时器ID
3.2 每一次触发事件, 先清除上一次定时器。 然后将事件处理代码放入本次定时器中
3.3开启定时器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <input type="text" placeholder="请输入文本">
    <script>
        // 1 声明全局变量存储定时器ID
        let timeID = null
        document.querySelector('input').addEventListener('input',function(){
            // 2 每一次触发事件, 先清除上一次定时器
            clearTimeout(timeID)
            // 3开启定时器 function函数,定时器指向window
            // 箭头函数:访问的是上级的作用域this=>input
            timeID = setTimeout(()=>{
                console.log(`您的搜索内容为:${this.value}`);
            },5000)
        })    
    </script>
</body>
</html>

节流

1.函数节流 : 单位时间内,频繁触发事件,只会触发一次
2.经典应用场景 : 滚动条事件scroll事件 鼠标移动mousemove事件
3.函数节流流程 :
3.1 声明全局变量存储上一次触发交互时间
3.2 每一次触发事件, 获取当前时间 - 上一次时间。判断是否超过节流间隔
3.3 如果 超过节流时间,则执行事件处理代码。 并且存储本次触发时间。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        body{
            width: 3000px;
            height: 3000px;
        }        
    </style>
</head> 
<body>
    <script>  
         //   1 声明全局变量存储上一次触发交互时间
         let listTime = null
        // 页面滚动事件
          let i = 1
         window.onscroll = function(){
         // (2)获取当前时间
         let currentTime = new Date()
         // (3)判断 当前时间 - 上次触发的时间 >= 节流间隔
         if(currentTime - listTime >= 500){
            console.log(`第${i++}次触发`)
           //(4)存储本次触发时间。
            listTime = currentTime
         }
         }    
    </script>
</body>
</html>