我想禁用单击处理时,切换动画展示,以便动画将不建,因为多个快速点击了。 谢谢
jQuery脚本:
$("#button").click({
$(this).unbind('click').next().toggle("slow",function(){$('#button').bind('click')});
});
HTML代码
<div
<a href='#' id='button'>Toggle</a>
<div>
test
</div>
</div>
至于你提到的事件附件的实现是坏了。 最重要的是有一个jQuery中称为.stop,释放你从需要使用绑定/解除绑定的方法。
$("#button").click(function(){
$(this).next().stop().toggle("slow");
});
它所做的就是清晰动画队列并停止当前的动画让你启动下一个。
停止对jQuery的文档的功能。 请注意,它有两个属性 - clearQueue和goToEnd。 了解更多关于更有力地使用这种方法。
首先,您要连接事件的方式被打破。 我不知道,如果这只是匆忙中提出的问题或在您的代码真正的错误,但这里的设置处理程序的正确方法:
$("#button").click(function(evt) { // <- you need to pass it a function!
$(this).unbind('click').next()
.toggle("slow",function(){$('#button').bind('click')});
});
但是到你的问题。 我认为你会从使用中获益jQuery的one
功能 。 只要点击处理程序被调用,它是作为一个单击处理程序删除; 因此,只执行一次 , 一次点击。 到动画后放置单击处理回,我觉得你这样做是正确; 在动画完成后重新绑定。
function clickHandler(evt) {
$(this).next().toggle("slow",
function() {
$('#button').bind('click', clickHandler);
});
}
$("#button").one('click', clickHandler);
如果使用one
在某种程度上对你来说太缓慢,最快的方式未免太添加的JavaScript的正确href
锚。 但是,你需要切换一个全局布尔变量,当您准备再次执行。
<a href="javascript:clickHandler(); return false;">...</a>
function clickHandler() {
if( someBoolean ) {
someBoolean = false;
//do stuff
}
someBoolean = true;
}
第1种方法
丢弃事件点击,而切换为动画:
$("#button").click(function(e) {
e.stopPropagation();
if ( $(this).next().is(':animated') ) {
return false;
}
$(this).next().toggle("slow");
});
见演示
第2种方法
设置时间延迟,以确保只有最新的点击触发:
var timeID;
$("#button").click(function(e) {
var $el = $(this);
clearTimeout(timeID);
timeID = setTimeout(function() {
$el.next().toggle("slow");
}, 250);
});
见演示
而不是忽略随后的点击,你可能会从一些好处stop()
方法。 见小提示:防止动画队列积聚的一个例子。 他在谈论hover
,但它适用于你很可能运行一个动画,另一个在同一事件后的任何地方。
或者,您可以禁用按钮,而不是丢弃整个单击处理? 它可能表达的意图,“不要再点击我”比下降的点击更好。
有使用jQuery的切换方法,当用户切换元素快速度点击它有时会给出错误结果的问题。 它的发生是由于点击事件的timesecond,当第一个事件是不是完全创建该问题完成的第二事件触发。 解决的办法是有点棘手,但易与setTimeout函数的帮助:
$('.navbar-toggle').on('click', function() { $('.mob-logo').toggle(); $('.navbar-toggle').css('pointer-events', 'none'); setTimeout(function() { // enable click after 0.5second $('.navbar-toggle').css('pointer-events', 'all'); }, 500); // 1 second delay });
文章来源: how to prevent click queue build up, using toggle in jquery? tried using bind/unbind('click')