🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 防抖:对于短时间内连续触发的事件,比如window.scroll事件,防抖就是让这个连续性的事件在指定的时间内触发,降低触发频率 ``` 1. 案例:窗口事件,以及滚动事件等只需要判断最后一次结果的事件 ``` function test(){ let body \= document.body.scrollTop let documentElement \= document.documentElement.scrollTop console.log('滚动条滚动的位置:' + body, documentElement) } function debounce(fn, delay) { let timer \= null return function() { if (timer) { clearTimeout(timer) } timer \= setTimeout(fn, delay) } } window.onscroll \= debounce(test, 500) ### 节流:节流和防抖非常像,区别在于防抖如果一直在快速触发,则函数不会执行,而节流则一定会在一定时间内执行一次,不管触发得频繁不频繁 1. 案例:input输入值时动态查询服务端数据,即使快速搜索时也会在设置的时间段内执行一次函数 ``` const input \= document.querySelector('#input') input.oninput \= throttle(function() { console.log(input.value) }, 500) function throttle(fn, delay) { let valid \= true return function() { if (!valid) return valid \= false setTimeout(() \=> { fn() valid \= true }, delay) } } ``` ### 防抖与节流:核心是可以使用setTimout函数来定时执行函数,在函数未执行前清除了其定时器则不会执行