setTimeout代替setInterval避免阻塞
使用setTimeout代替setInterval避免setInterval阻塞
/**
* setTimeout替代setInterval,避免阻塞
* @export
* @class InsteadSetInterval
*/
export class InsteadSetInterval {
constructor(fn, timeout, immediately) {
this.timer = null
this.fn = fn
this.immediately = immediately
this.timeout = timeout
this.isOff = false
this.start()
}
doIt () {
this.isOff = false
return setTimeout(() => {
this.fn()
if (this.isOff) return
this.timer = this.doIt(this.fn, this.timeout)
}, this.timeout)
}
stop () {
window.clearTimeout(this.timer)
this.isOff = false
}
start () {
this.timer && clearTimeout(this.timer)
this.immediately && this.fn()
this.timer = this.doIt()
}
}

浙公网安备 33010602011771号