【问题标题】:cancel all event except the last one,取消除最后一个之外的所有事件,
【发布时间】:2012-07-22 11:25:49
【问题描述】:

是否有可能这样做..假设在一段时间内有很多相同的事件触发很多时间。我们将取消之前的所有事件,只使用最后一个。

只有在3秒内没有更多事件时,最后一个事件才会持续一次。

例如。有一个按钮。我们将让用户根据需要多次单击此按钮,并且我们不会禁用此按钮。无论用户点击了多少次,我们都将其视为最后一次点击。当 3 秒内没有更多点击时,将执行点击事件。

【问题讨论】:

标签: javascript javascript-events


【解决方案1】:

您要查找的内容称为debouncing。对于这个任务,已经有极品plugin/library from Ben Alman

(function() {
    var button = document.getElementsByTagName("button")[0],
        func = Cowboy.debounce(1000, function() { console.log("click fired!"); });

    button.addEventListener("click", func);
}())​

fiddle

【讨论】:

  • 谢谢,不知道这个
  • Cowboy 与 jquery 1.7.2 不兼容 .. 仍然有很大的帮助。
  • @SarawutPositwinyu 不​​对 ;) 你没有用 jQuery 标记你的问题,所以我认为你正在寻找一个香草 JS 解决方案。如果 jQuery 可用,插件会将他的两个函数添加到 jQuery 命名空间,而不是创建自己的 Cowboy。因此,您必须使用$.debounce 而不是Cowboy.debounce。这一切都记录在 Ben Almans 网站上 :)
  • @Andreas 是的,我已经尝试过了,因为我在文档中知道了这一点。但它并不真正兼容,那里的其他人也抱怨它在 Jquery 1.7.1 中不兼容无论如何 debounce 的知识帮助我搜索另一个,我现在正在使用下划线。
【解决方案2】:
var domButton = document.getElementById('some-button'),
    timeOut;
domButton.addEventListener('click', function(e) {
    if (e.clientX && e.clientY) {
        e.preventDefault();
        clearTimeout(timeOut);
        timeOut=setTimeout(function({document.getElementById('somebutton').click()},3000);
    }
},false)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2011-12-02
    相关资源
    最近更新 更多