防抖函数的使用
一、什么是防抖函数?
防抖函数就是指触发某一个事件后,在一段时间之内(n秒)只能执行一次,如果触发事件后在 n 秒内又触发了该事件,则会重新计算函数延执行时间,如果在n秒内没有在触发该事件,函数才会执行。
二、防抖函数的使用时机
在开发中有一些事件会被频发触发、比如:resize,scroll,mousemove,mousehover等,不做处理的话可能一秒内会触发成百上千次,浪费计算机资源、降低程序运行速度、甚至浏览器卡死,使用防抖函数,可以很好地避免这个问题。
三、防抖函数的要点
需要一个 setTimeout 延时器来辅助实现,延迟运行需要执行的代码。如果方法或事件多次触发,则把上次记录的延迟执行代码用 clearTimeout 清掉,重新开始计时。若计时期间事件没有被重新触发,等延迟时间计时完毕,则执行目标代码。
四、代码的简单实现
let timer
= null;
function debounce(fn
, time
) {
return function () {
if (timer
!= null) {
clearTimeout(timer
);
}
timer
= setTimeout(fn
, time
);
}
};
function mouseMove() {
console
.log(Math
.random());
};
document
.querySelector(".box").onmouseenter = function () {
document
.querySelector(".box").addEventListener("mousemove", debounce(mouseMove
, 1000));
}