这个两个函数都是考验对浏览器性能的优化处理。
//防抖:常用在滚动页面监听数据
当持续触发事件时,设定的时间到来之前,触发一次,重新计数,不管时间间隔,只要到了时间就触发,所以就有缺点,不断触发,事件永远到不了终点。
function debounce(fn,delay){
let time=null
return function(){
if(time) {
clearTimeout(time)
}
time=setTimeout(fn,time)
}
}
//节流:常用表单按钮多次提交触发事件
当持续触发事件时,规定时间内触发一次,时间没到就不触发,这里有个时间间隔。
function throttle(fn, delay) {
let state = true
return function() {
if (state) {
return false
}
state = false
setTimeout(() => {
fn.apply(this)
state=true
}, delay)
}
}
//验证
function handle() {
console.log(Math.random());
}
addEventListener('scroll', debounce(handle, 1000));