如何防止点击队列中逐渐累积,在使用jQuery的切换? 使用绑定/解除绑定(“点击”)试图(ho

2019-08-08 18:35发布

我想禁用单击处理时,切换动画展示,以便动画将不建,因为多个快速点击了。 谢谢

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>

Answer 1:

至于你提到的事件附件的实现是坏了。 最重要的是有一个jQuery中称为.stop,释放你从需要使用绑定/解除绑定的方法。

$("#button").click(function(){
    $(this).next().stop().toggle("slow");
});

它所做的就是清晰动画队列并停止当前的动画让你启动下一个。

停止对jQuery的文档的功能。 请注意,它有两个属性 - clearQueue和goToEnd。 了解更多关于更有力地使用这种方法。



Answer 2:

首先,您要连接事件的方式被打破。 我不知道,如果这只是匆忙中提出的问题或在您的代码真正的错误,但这里的设置处理程序的正确方法:

$("#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;
}


Answer 3:

第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);    

});

见演示



Answer 4:

而不是忽略随后的点击,你可能会从一些好处stop()方法。 见小提示:防止动画队列积聚的一个例子。 他在谈论hover ,但它适用于你很可能运行一个动画,另一个在同一事件后的任何地方。

或者,您可以禁用按钮,而不是丢弃整个单击处理? 它可能表达的意图,“不要再点击我”比下降的点击更好。



Answer 5:

有使用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')