Javascript 如何在函数完成之前忽略鼠标活动

Javascript 如何在函数完成之前忽略鼠标活动,javascript,jquery,Javascript,Jquery,我使用下面的代码在鼠标上滑出一个div,等待几秒钟,然后将div滑回 $(document).ready(function() {$("#divider").mouseover(function () {$("#slider").show("slide", {direction: "left"}, 1000).pause(2000).hide("slide", {direction: "left"}, 1000);} );} ); $(文档).ready(函数(

我使用下面的代码在鼠标上滑出一个div,等待几秒钟,然后将div滑回

$(document).ready(function() {$("#divider").mouseover(function () {$("#slider").show("slide", {direction: "left"}, 1000).pause(2000).hide("slide", {direction: "left"}, 1000);} );} ); $(文档).ready(函数() {$(“#除法器”).mouseover(函数() {$(“#滑块”).show(“幻灯片”{direction:“left”},1000)。暂停(2000)。隐藏(“幻灯片”{direction:“left”},1000);} );} );
我相信这很简单,但我对Javascript/jQuery的了解有限。如何使触发器上的任何鼠标活动都被忽略,直到动画完成?现在,如果当div打开时,将鼠标移到触发区域上,它会“记住”并播放动画,播放次数与将指针移过触发区域的次数相同

关闭事件处理程序(不确定这是否有效,但大致如下):


关闭事件处理程序(不确定这是否有效,但大致如下):


我建议在动画完成之前将事件从分割器中移除,而不是使用隐藏回调函数将事件处理程序添加回分割器中

$(document).ready(function() {
    function divider_mouseover() {
        $('#divider').unbind('mouseover');

        $("#slider")
           .show("slide", {direction: "left"}, 1000)
           .pause(2000)
           .hide("slide", {direction: "left"}, 1000, function() {
               $("#divider").mouseover(divider_mouseover);
           });
    };

    $("#divider").mouseover(divider_mouseover);
};

我建议在动画完成之前将事件从分割器中移除,而不是使用隐藏回调函数将事件处理程序添加回分割器中

$(document).ready(function() {
    function divider_mouseover() {
        $('#divider').unbind('mouseover');

        $("#slider")
           .show("slide", {direction: "left"}, 1000)
           .pause(2000)
           .hide("slide", {direction: "left"}, 1000, function() {
               $("#divider").mouseover(divider_mouseover);
           });
    };

    $("#divider").mouseover(divider_mouseover);
};

不要绑定、取消绑定和重新绑定,而是使用一个标志来决定是否应该关注事件

$(document).ready(function(){
    $("#divider").mouseover(function(){
        var $this = $(this);
        if($this.data('nomouse')) return;
        $this.data('nomouse',true);
        $("#slider")
        .show("slide", {direction: "left"}, 1000)
        .pause(2000)
        .hide("slide", {direction: "left"}, 1000, function() {
            $this.data('nomouse',false);
        });
    });
});

绑定和解除绑定是jQuery反模式中的一种,在

不绑定、解除绑定和重新绑定中使用一个标志来决定是否应该关心该事件

$(document).ready(function(){
    $("#divider").mouseover(function(){
        var $this = $(this);
        if($this.data('nomouse')) return;
        $this.data('nomouse',true);
        $("#slider")
        .show("slide", {direction: "left"}, 1000)
        .pause(2000)
        .hide("slide", {direction: "left"}, 1000, function() {
            $this.data('nomouse',false);
        });
    });
});

绑定和解除绑定是jQuery反模式中的一种,我想我理解您所做的,但它不起作用,因为初始事件没有触发,所以鼠标悬停不会触发第一张幻灯片。不要绑定、解除绑定和重新绑定。使用旗帜。绑定和解除绑定会增加额外的开销,并会降低速度。我想我理解您所做的,但它不起作用,因为初始事件没有触发,所以鼠标悬停不会触发第一张幻灯片。请不要绑定、解除绑定和重新绑定。使用旗帜。绑定和解除绑定会增加额外的开销,并会降低速度。同上。最初的鼠标悬停似乎没有触发,所以它什么也不做。同上。最初的鼠标悬停似乎没有触发,所以它什么也没做。我完全同意这个答案,+1。我的装订/解装订没有那么时髦。谢谢你的链接!我完全同意这个答案,+1。我的装订/解装订没有那么时髦。谢谢你的链接!