可以考虑加入一些滞后效应。基本上记录您上次响应任何事件的时间,并在守卫时间内忽略后续事件。
您可以使用jQuery的data
(答案末尾的示例),但我更喜欢这个:一个通用的防抖器:
使用click
和focus
的实时示例 | 实时源代码
$("#field").on("click focus", debounce(100, function(e) {
}));
debouncer
函数:
function debounce(guardTime, func) {
var last = 0;
if (typeof guardTime === "function") {
func = guardTime;
guardTime = 100;
}
if (!guardTime) {
throw "No function given to debounce";
}
if (!func) {
throw "No func given to debounce";
}
return function() {
var now = +new Date();
if (!last || (now - last) > guardTime) {
last = now;
return func.apply(this, arguments);
}
};
}
(“去抖动器”是一个常用术语,用于使用滞后特性限制输入。如果我没记错,它来自“开关去抖动器”,这是一种(非常)简单的电路,用于避免在机械触发式电开关从打开到关闭和反之转换时多次触发动作,因为当接点靠近时,可以出现大量的闭合/开启/闭合/开启/闭合/开启抖动,直到开关达到稳态。这种抖动被称为“
bouncing”,因此,“去抖动器”。)
仅使用jQuery的data
方法的方法:
$('input').on('focus click', function(){
var $this = $(this);
var now = +new Date();
var lastClicked = $this.data("lastClicked");
if (lastClicked && (now - lastClicked) < 100) {
return;
}
$this.data("lastClicked", now);
});