jQuery阻止在启动之前执行操作

时间:2010-04-26 20:33:26

标签: jquery animation navigation

我遇到了一个小问题。 我有一个nevigation构建,当鼠标结束时打开,但也是 听取按键,而不是触发相同的动画,就像鼠标结束一样 另外打开子菜单。现在,当按键处于活动状态并且我正在使用时 鼠标悬停在该导航上,它会在我点击链接之前触发关闭操作。 我该如何阻止这种结束行动?

$(function () {

// keypress
$('html').live('keydown', function (e) {
   if ( e.keyCode == 67 ){

       $("#control").animate({width: '+=105', duration:400}, 
           function(){ 
               /*callback*/     
               $("#control").css({overflow:'visible'});
               $("#control-menu li a").fadeTo('fast', 1);
               $("#categories ul").css({marginLeft: '140px', display: 'block'}).fadeIn('slow');
               $('#control').mouseenter(function() { $(this).stop(); });
           }
       )
   }
}); 

// set easing method    
jQuery.easing.def = 'easeInOutExpo'; 

// make menu work   
$("#control-menu li a").css({opacity:'0.1'});
$("#control").hoverIntent(
 function(){
    $(this).stop().animate(
        {width: '+=105',
        duration:400}, function(){ 
            /*callback*/    
            $("#control").css({overflow:'visible'});
            $("#control-menu li a").fadeTo('fast', 1);
        })
 },
 function(){
    $("#control-menu li a").fadeTo('fast', 0.1);
    $(this).stop().animate(
        {width: '-=105', 
        duration:800}, function(){ 
            /*callback*/    
            $("#control").css({overflow:'hidden'});
        })  
 }); 

// END  
});

提前感谢您的帮助!!!!

请问, 丹尼尔

2 个答案:

答案 0 :(得分:0)

看起来它没有触发你的结束动作,而是立即停止动画打开它。

keydown处理程序中的这一行:

$('#control').mouseenter(function() { $(this).stop(); });

#control添加事件处理程序,在当前事件处于document.ready之后绑定,因此在之后执行。这意味着当你悬停时,它会启动动画,然后立即停止动画,因为当按下keydown时,它会在mouseenter上添加一个处理程序来执行此操作。

如果您只删除该行,它将停止此行为...但是查看您的代码我不清楚为什么它首先出现在那里。如果您可以描述它是为了解决而添加的,那么应该有更好的方法来做到这一点,而不会导致当前的问题。

答案 1 :(得分:0)

也许我应该打破代码升级并解释我想要做的事情。我知道肯定会有更好的方法,但我不得不说,我绝对是新手:)

好的,让我们分手吧:

  1. //使菜单工作 基本上处理悬停时菜单出现的功能。那里的一切都像魅力一样工作

  2. //按键 这就是问题所在。当按下键盘上的“C”时,导航与我用鼠标滑过导航和“类别”上的点相同。它还打开了该点的子菜单。现在,这一切都停留了。当我现在用鼠标进入该菜单并想点击一个menupoint时,我点开1.点,所以菜单表现得像它应该是,它关闭。 这是我插入该功能的方法:

    $('#control')。mouseenter(function(){$(this).stop();});

  3. 在按键完成后,

    直接作为一个函数,这样我就可以在那里输入鼠标,甚至不会触发关闭。

    就像我上面所说的那样,有更好的方法可以做到这一切。例如,读出所有链接并基于html结构动态生成keydown等等...... 不幸的是,我是一个菜鸟,所以我不会在那时自己得到它