2017-01-02 34 views
0

由于人们误解我的措辞,我会重写它,我想“下面的代码”忽略我在jQuery中下面评论的函数,如果它发生在最后“X”秒。 这是我的代码。忽略函数,如果发生在x秒内

编辑::请写参考这个例子的答案。 “剧本忽略了课堂上的变化,延迟将无法正常工作”http://www.w3schools.com/code/tryit.asp?filename=FBC4LK96GO6H

对不起,包括我自己在内的每个人都感到困惑。

+2

的可能的复制[什么是最简单的方法来调用jQuery中每5秒一个函数?](http://stackoverflow.com/questions/2170923/whats-the-easiest-way-to-call-a-function-every-5-seconds-in-jquery) –

+0

@ FabianSchultz与我的问题无关。完全不同。 –

回答

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'); 
     } 
     }); 
    }); 
    }); 
} 

Remeber,你应该确定所选择的元素delayTime与此事件:

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

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

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

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

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

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


@更新 我发现了一些棘手的方法来继续使用点击功能,并使其按预期工作:

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

+0

让我测试一下我的编码,但是,如果添加到“if”和“else if”中,它可以很好地工作 –

+0

也许你想包装整个'$(“。element1”)。click(function ){...}'函数​​与这个如果(ofc把这个,如果里面,进入函数) 试试这个(以前我已经包装只切换到红色与if,但记住,红色是初始值,所以在我的第一个例子第二次从蓝色到红色将被延迟,我想你只想延迟从蓝色到红色,因为有评论)。这是涵盖每一个点击的版本: http://codepen.io/anon/pen/LxPrGP –

+0

嘿,我想我已经想出了我的这个问题的一部分,我知道它不是写在原来的帖子,但这一切都作为脚本附加到身体。添加的已添加的脚本在重复时会被忽略。如果没有太多要问,用你给出的原始答案,你能解释我如何将所有这些附加到身体并使其仍然有效吗? –

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 
}) 
+0

http://www.w3schools.com/code/tryit.asp?filename=FBC4LK96GO6H它会与此工作? –

+0

为什么不......你尝试过吗? – charlietfl

+0

亲自看看,我对jquery和所有人都比较陌生,如果你看到我遇到的问题,你会更好地理解我的想法。我试过了,但我认为更大的问题是jQuery中的其他内容。 –