1.防抖
防抖的原理就是:你尽管触发事件,但是我一定在事件触发 n 秒后才执行,如果你在一个事件触发的 n 秒内又触发了这个事件,那我就以新的事件的时间为准,n 秒后才执行,总之,就是要等你触发完事件 n 秒内不再触发事件,我才执行
参数说明:
1.fn:需要执行防抖的函数
2.wait:等待的时间间隔
3.immdiate:立刻执行函数,然后等到停止触发n秒后,才可以重新触发执行。如果频繁点击触发事件,会从新计算wait时间,直到不触发事件达到wait时长后才可以重新触发
function debounce(fn,wait,immdiate) {
let timeout,result,callnow
return function() {
let context = this
let args = arguments
if(timeout) {
clearTimeout(timeout)
}
if(immdiate) {
callnow = !timeout
timeout = setTimeout(function(){
timeout = null
},wait)
if(callnow) {
result = fn.apply(context,args)
}
}else {
timeout = setTimeout(function(){
result = fn.apply(context,args)
},wait)
}
return result
}
}
2.节流
节流的原理是:如果持续触发一个事件,每隔一段事件只执行一次事件,目的是为了降低事件触发的次数,按照事先定义的周期去执行.
function throttle(fn,wait) {
let context,args
let previous = 0
return function() {
let now += new Date()
context = this
args = arguments
if(now - previous >wait) {
fn.apply(context,args)
previous = now
}
}
}