2010-04-26 81 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,所以我不會在這個時候自己弄到它

相關問題