使用 jQuery 在初始 .mousedown() 事件后防止后续触发

Posted

技术标签:

【中文标题】使用 jQuery 在初始 .mousedown() 事件后防止后续触发【英文标题】:Prevent subsequent firings after initial .mousedown() event with jQuery 【发布时间】:2014-03-02 02:28:29 【问题描述】:

问题描述 (Fiddle):

多次单击 #test 框会创建同时播放的音频层,并在每次按下时短暂暂停或错开.fadeOut() 效果。我想防止触发后续的 mousedown 事件,以便 .fadeOut() 效果无缝完成并且不会触发额外的音频播放。

代码:

$('#test').mousedown(function() 
  var sound = new Audio("http://sounddogs.com/previews/3668/mp3/824357_SOUNDDOGS__ri.mp3");
  sound.play();
  $('#test').stop(true).fadeOut(2000);
);

【问题讨论】:

喜欢这个? api.jquery.com/one 这很酷,我从来不知道它存在。谢谢你教育我! 很高兴它有帮助...我不确定这是否是您的意思,所以我会回答一下 【参考方案1】:

这将触发一次事件:http://api.jquery.com/one/

【讨论】:

【参考方案2】:

简单的方法:

var clicked = 0;
$('#test').mousedown(function () 
    if (clicked == 0) 
        clicked = 1;
        var sound = new Audio("http://sounddogs.com/previews/3668/mp3/824357_SOUNDDOGS__ri.mp3");
        sound.play();
        $('#test').stop(true).fadeOut(2000);
        setTimeout(function()clicked = 0;, 2000);
    
);

http://jsfiddle.net/yxDSL/1/

【讨论】:

我一直在我的代码的其他区域实施此解决方案,但它在这里不起作用;原来问题是我通过调用另一个函数来重置我的clicked 变量。只需要将其移出范围,问题就解决了。这是迄今为止最好的解决方案,我从来没有想过使用 setTimeout 进行重置。如此简单,却又如此精彩。谢谢。【参考方案3】:
 $('#test').one('click',function()  //would only trigger on first click
  var sound = new Audio("http://sounddogs.com/previews/3668/mp3/824357_SOUNDDOGS__ri.mp3");
  sound.play();
 $('#test').stop(true).fadeOut(2000);

 $('#test').click(function() // for subsequent click write the function inside this

 );
);

【讨论】:

我不知道 .one() 函数甚至存在。这在未来将非常有帮助,但不太适合我的需求。非常感谢。【参考方案4】:

这样就可以了……

$('#test').mousedown(function() 
  var sound = new Audio("http://sounddogs.com/previews/3668/mp3/824357_SOUNDDOGS__ri.mp3");
  sound.play();
  $('#test').unbind("mousedown").stop(true).fadeOut(2000);`
); 

【讨论】:

谢谢您,先生。我什至从未想过将 .unbind() 函数用于这样的事情。你知道的越多…… 没问题,简短而简单:)

以上是关于使用 jQuery 在初始 .mousedown() 事件后防止后续触发的主要内容,如果未能解决你的问题,请参考以下文章

如何绑定 Mousedown 和 Touchstart,但不响应两者?安卓、jQuery

在jQuery中同时拥有mousedown / mouseup和dblclick

如何在初始 mousedown 事件后取消文本选择?

JQuery UI Draggable on long press 适用于 mousedown 但不适用于 touchstart

jquery 或js关于鼠标单击和拖拽的区别

jQuery 鼠标事件