如果在x秒内发生,则忽略功能

时间:2017-01-02 01:28:44

标签: javascript jquery html

由于人们误解了我的措辞,我会重写它,我想要"使用下面的代码"忽略我在jquery下面评论过的函数,如果它发生在最后一个" X"秒。 这是我的代码。

编辑::请参考这个例子写下答案。 "脚本忽略了课堂上的变化,延迟不会工作" http://www.w3schools.com/code/tryit.asp?filename=FBC4LK96GO6H

很抱歉让包括我在内的所有人感到困惑。

2 个答案:

答案 0 :(得分:2)

由于作者的更新后编辑。

您可以创建custon事件。通过此功能,您将定义:" delayedClick"选定对象上的事件。

function delayedClickable(selector, delayTime){
  $(document).ready(function(){
    $(selector).each(function () {
      var lastTimeFired = 0;
      $(this).click(function(){
        if(Date.now() - delayTime > lastTimeFired) {
          lastTimeFired = Date.now();
          $(this).trigger('delayedClick');
        }
      });
    });
  });
}

请记住,您应该通过以下方式在所选元素上定义delayTime和此事件:

var delayTime = 3 * 1000; // 3 sec delay between firing action
delayedClickable('.Img2', delayTime);

然后只在元素上使用你的事件。例如,可以以这种方式使用click事件:

$element.on('click', function () {
  // ...
});

您的自定义delayedClick事件应该以这种方式使用:

$element.on('delayedEvent', function () {
  // ...
});

完整示例: http://www.w3schools.com/code/tryit.asp?filename=FBC56VJ9JCA5

@UPDATE 我发现了另一种使用点击功能并使其按预期工作的棘手方法:

function delayedClickable(selector, delayTime){
  $(document).ready(function(){
    $(selector).each(function () {
      var scope = this;
      $(this).click(function(){
        scope.style.pointerEvents = 'none';
        setTimeout(function () {
          scope.style.pointerEvents = 'auto';
        }, delayTime);
      });
    });
  });
}

然后

var delayTime = 3 * 1000; // 3 sec delay between firing action
delayedClickable('.Img2', delayTime);

这就是全部。

第二种方式的关键是我们在单击时禁用元素上的任何指针事件,然后在超时后我们将这些事件恢复工作。 https://developer.mozilla.org/en/docs/Web/CSS/pointer-events

完整的例子: http://www.w3schools.com/code/tryit.asp?filename=FBC678H21H5F

答案 1 :(得分:1)

可以使用setTimeout()更改标志变量和条件检查事件处理程序中的标志

var allowClick = true,
    delaySeconds = 5;
$(".element1").click(function(){
   if(!allowClick){
      return; // do nothing and don't proceed
   }
   allowClick = false;
   setTimeout(function(){
      allowClick = true;
   }, delaySeconds * 1000 );

   // other element operations
})