Vue防抖和节流
- 防抖(debounce)
在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时
解释:我们在点击请求或者点击加载等过程中,只需要点击一次,但由于请求慢,点击了好多次,导致多次请求,防抖就是在点击了好多次之后的最后一次才会请求
实例:
data:{
times: '',
},
methods: {
extract() {
this.debounce(this.handle, 1000)
},
debounce(fn, delay) {
if (this.times) clearTimeout(this.times)
this.times = setTimeout(() => {
fn()
}, delay);
},
handle() {
console.log("执行了······")
},
}
- 节流(throttle)
节流不是不让函数触发, 而是减少函数触发的频率 ,就是说在固定时间内, 函数只能执行一次,在某个时间段内暂时失效,过了这段时间后再重新激活
解释:类似于游戏中技能的CD时间。
实例:
data(){
return{
valid:false
}
},
methods: {
extract() {
this.throttle(this.handle, 1000)
},
throttle(fn, wait) {
if (!this.valid) {
//(通行令不正确,不许进)判读如果不是false点击的话就返回一个false,并且不在向下执行。
return false
}
//这里写要执行的任务,当你设置的这个到了之后,便会执行你所定义的方法。
this.valid = false
setTimeout(() => {
this.valid = true
this.handle()
}, wait)
},
//实现对应的逻辑
handle() {
console.log('执行完毕······')
},
}