一、节流(throttle)
高频事件触发,但是在n秒内只会执行一次,如果这个单位时间内触发多次函数,只有一次生效
使用场景:频繁触发,onscroll滚动条
- 过程:
每次触发事件时都取消之前的延时调用方法
用户拖动滚动条可以用 节流 方式实现
mounted() {
window.addEventListener('scroll', this.scrollToTop)
},
methods: {
scrollToTop() {
clearTimeout(this.tiemID);
this.tiemID = setTimeout(() => {
console.log('执行节流函数');
}, 1000);
}
}
二、防抖(debounce)
触发高频函数事件后,n秒内函数只能执行一次,如果在n秒内这个事件再次被触发的话,那么会重新计算时间
使用场景:input框,用户在不断输入值时,用防抖来节约请求资源
- 过程:
每次触发事件时都取消之前的延时调用方法
<template>
<div>
<input type="text" @keyup="debounce" />
</div>
</template>
<script>
//定义 timer
let timer;
export default {
methods: {
debounce: function() {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
console.log("防抖...");
timer = undefined;
}, 2000);
}
}
};
</script>