Javascript 有没有一种方法可以同时捕获同一类型的多个事件?
我正在为这个大而没有很好文档的框架开发一个插件。我需要将Javascript函数绑定到事件。问题是,这个事件几乎在同一时间被多次触发,我对此没有控制权,我只需要函数运行一次,特别是因为其中包含一些Ajax调用 我对Javascript不太熟悉,所以这个问题可能很愚蠢,但有没有办法在短时间内缓冲事件,当没有更多的传入事件时,运行该函数?这通常称为去抖动。下面是一个关于节流和去抖动的示例 Debounce技术允许我们将多个连续调用分组到一个调用中 本文中列出了多个实现,但一个示例实现可能是此版本将在多个调用结束时调用事件,一旦它们停止触发指定的时间量:Javascript 有没有一种方法可以同时捕获同一类型的多个事件?,javascript,events,Javascript,Events,我正在为这个大而没有很好文档的框架开发一个插件。我需要将Javascript函数绑定到事件。问题是,这个事件几乎在同一时间被多次触发,我对此没有控制权,我只需要函数运行一次,特别是因为其中包含一些Ajax调用 我对Javascript不太熟悉,所以这个问题可能很愚蠢,但有没有办法在短时间内缓冲事件,当没有更多的传入事件时,运行该函数?这通常称为去抖动。下面是一个关于节流和去抖动的示例 Debounce技术允许我们将多个连续调用分组到一个调用中 本文中列出了多个实现,但一个示例实现可能是此版本将在
function debounce(callback, duration) {
let timer = null;
let args = [];
let thisVal = null;
function trigger() { callback.apply(thisVal, args); }
function onEvent() {
thisVal = this;
args = [].slice.call(arguments);
clearTimeout(timer);
timer = setTimeout(trigger, duration);
}
return onEvent;
}
然后,您可以使用以下代码调用它,例如:
function myEventListener(data) {
// do your thing
}
window.addEventListener('my-event', debounce(myEventListener, 100));
这将阻止再次调用事件侦听器,直到它停止被触发至少100毫秒。您可能要寻找的是一种称为“去盎司”或“节流”的东西,npm上有很多这样的实现,或者如果您使用类似lodash的东西,这也附带了一种。