- 如果在
200ms
(预期时间内)内没有触发事件,那么就执行函数 - 如果在
200ms
(预期时间内)内再次触发事件,那么当前的计时取消,重新开始计时
function debounce(fn, delay) {
let timer = null
return function() {
const that = this,
e = arguments
if(timer) {
clearTimeout(timer)
timer = setTimeout(function() {
fn.apply(that, e)
}, delay)
}else {
timer = setTimeout(function() {
fn.apply(that, e)
}, delay)
}
}
}
function debounce(fn, delay) {
let timer = null
return function(...arg) {
if(timer) clearTimeout(timer)
timer = setTimeout(() => {
fn.apply(this, arg)
}, delay)
}
}
function debounce(fn, delay) {
let timer = null
return function(...arg) {
if (timer) clearTimeout(timer)
if (!timer) fn.apply(this, arg)
timer = setTimeout(() => {
timer = null
}, delay)
}
}
function debounce(fn, delay, immediate = false){
let timer = null
return function(...arg){
if(timer) clearTimeout(timer)
if(immediate) {
if (!timer) fn.apply(this, arg)
timer = setTimeout(() => {
timer = null
}, delay)
} else {
timer = setTimeout(() => {
fn.apply(this, arg)
}, delay)
}
}
}
function throttle(fn, wait){
let lasttime = 0
return function(...arg){
let nowtime = Date.now()
if(nowtime - lasttime > wait){
fn.apply(this, arg)
lasttime = nowtime
}
}
}