2010-04-26 44 views
1

我有一个小问题。 我有一个nevigation构建,它打开鼠标结束时,但也 听按键,比发射相同的动画,如果鼠标结束,只需 另外打开子菜单。现在,当按键处于活动状态时,我将鼠标悬停在该导航上,在点击链接之前触发关闭操作。 如何防止关闭操作?jQuery防止动作在启动之前执行

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

在此先感谢您的帮助!

请问候, 丹尼尔

回答

0

它看起来像它不是射击您关闭动作,而是会立即停止你的动画打开它。

这条线在​​处理程序:

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

是添加一个事件处理#control,当前的一个约束之后在document.ready,所以它之后执行。这意味着当你悬停时,它开始动画,然后立即停止它,因为当按下​​时,它添加了一个处理程序在mouseenter上执行此操作。

如果你只是删除该行,它会阻止这种行为......但看着你的代码,我不清楚它为什么在那里摆在首位。如果您可以描述它是为了解决问题而添加的,那么应该有更好的方法来解决这个问题,而不是导致当前的问题。

0

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

好吧,让我们把它分解:

  1. //使菜单的工作 基本处理菜单上出现悬停功能。那里的一切都像一个迷人的工作

  2. // keypress 问题出在这里。当按下键盘上的“C”时,导航与我在导航上使用鼠标和“类别”上的点相同。它也打开了该点的子菜单。现在,这一切都保持着。当我现在用鼠标移动到该菜单并且想要点击menupoint时,我会触发1.点,所以菜单的行为就像它应该的那样,它会关闭。 这是我的方法来插入该功能:

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

直接作为按键结束后的功能,以便我可以在那里输入鼠标,甚至不会触发关闭。

就像我上面同意的那样,会有更好的方法来做到这一点。例如,读出所有链接并基于html结构动态生成keydown等等...... 不幸的是,我是一个noob,所以我不会在这个时候自己弄到它

相关问题