Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有一种方法可以同时捕获同一类型的多个事件?_Javascript_Events - Fatal编程技术网

Javascript 有没有一种方法可以同时捕获同一类型的多个事件?

Javascript 有没有一种方法可以同时捕获同一类型的多个事件?,javascript,events,Javascript,Events,我正在为这个大而没有很好文档的框架开发一个插件。我需要将Javascript函数绑定到事件。问题是,这个事件几乎在同一时间被多次触发,我对此没有控制权,我只需要函数运行一次,特别是因为其中包含一些Ajax调用 我对Javascript不太熟悉,所以这个问题可能很愚蠢,但有没有办法在短时间内缓冲事件,当没有更多的传入事件时,运行该函数?这通常称为去抖动。下面是一个关于节流和去抖动的示例 Debounce技术允许我们将多个连续调用分组到一个调用中 本文中列出了多个实现,但一个示例实现可能是此版本将在

我正在为这个大而没有很好文档的框架开发一个插件。我需要将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的东西,这也附带了一种。