防抖是指在事件触发n秒后再执行回调,如果在n秒内再次被触发,则重新计算时间
应用场景:1.scroll事件滚动触发,2.搜索框输入查询 3.表单验证 4.按钮提交事件 4.浏览器窗口缩放,resize事件
//防抖
function debounce(fn, delay) {
var timer = null
return function () {
clearTimeout(timer)
timer = setTimeout(function () {
fn.apply(this)
timer = null
}, delay)
}
}
节流是指如果持续触发某个事件,则每隔n秒执行一次
应用场景:1.DOM元素的拖拽功能实现 2.射击游戏类 3.计算鼠标移动的距离 4.监听scroll事件
//节流
function throttle(fn, delay) {
var timer = null
return function () { //使用闭包 所以timer 不会每次进来都重新赋值为0
if (timer) {
return
}
timer = setTimeout(function () {
fn.apply(this)
timer = null
})
}
}