防抖(debounce)是一种优化高频率触发事件(如滚动、输入等)的技术,它的主要目的是将多个连续的事件合并为单个事件执行。以下是一个简单的防抖函数以避免频发触发滚动事件的实现方法:
function debounce(func, wait) {
let timeout;
return function executedFunction(...args) {
const context = this;
clearTimeout(timeout); // 清除上一次延时函数
timeout = setTimeout(() => {
func.apply(context, args); // 延时后执行函数
}, wait);
};
}
// 使用示例
const scrollBox = document.getElementById('scrollBox');
// 假设我们有一个函数,当滚动停止后我们希望执行它
function handleScrollStop() {
console.log('滚动停止了');
// 这里可以执行一些基于滚动位置的操作
}
// 使用防抖函数包装我们的处理函数
const debouncedHandleScrollStop = debounce(handleScrollStop, 200); // 200毫秒后执行
// 监听滚动事件
scrollBox.addEventListener('scroll', debouncedHandleScrollStop);