2012-04-27 94 views
5

我有這樣的HTML代碼JQuery的動畫邊框

<nav id="mainNav"> 
    <ul> 
     <li><a href="#">Home</a></li> 
     <li><a href="#">Services</a></li> 
     <li><a href="#">About</a></li> 
     <li><a href="#">Contact</a></li>   
    </ul> 
</nav> 

它有這個

#mainNav { display:block; padding:5px; } 
    #mainNav ul { display:block; list-style-type:none; width:500px; border-collapse:collapse; } 
    #mainNav li { display:inline-block; width:100px; height:66px; text-align:center; padding-top:10px; float:left; background-color:gray; cursor:pointer; border-bottom:0px solid red; } 
    #mainNav a { color:white; text-decoration:none; text-transform:capitalize; } 
    #mainNav a.aHover { color:red; } 

CSS樣式和連接到這是jQuery代碼

$(document).ready(function() { 
$('#mainNav li').mouseover(function() { 
    var el = $(this); 
    $(this).animate({ 
    "border-bottom-width":"+=5px" 
    },{ queue: false, duration: 500 }, function() { 
    el.css('border-bottom-width', '5px'); 
    }); 
    $(this).children('a').addClass('aHover'); 
}); 
$('#mainNav li').mouseout(function() { 
    var el = $(this); 
    $(this).animate({ 
    "border-bottom-width":"-=5px" 
    },{ queue: false, duration: 500 }, function() { 
    el.css('border-bottom-width', '0px'); 
    }); 
    $(this).children('a').removeClass('aHover'); 
}); 
}); 

現在我想要它做的是,淡入邊框顏色變成紅色並淡出,或者如代碼中所寫,在懸停時將邊框展開爲最大5px將邊界放回0px。

的問題是,你可以看到我試着改變類LI元件在動畫結束,以確保邊境進入其最大或最小寬度,但不起作用,爲什麼呢?

你會如何淡入和淡出邊框顏色?

+0

' 「邊界底部寬度」: 「+ = 5像素」',不應有'px'。設置爲「border-bottom-width」:「+ = 5」' – Nadh 2012-04-27 17:57:19

+0

您可能想使用mouseenter和mouseleave或hoverIntent插件。 – epascarello 2012-04-27 18:01:34

回答

4

嘗試以下,

DEMO

$(document).ready(function() { 
    $('#mainNav li').hover(function() { 
     var el = $(this); 
     $(this).stop(true, true).animate({ 
      "border-bottom-width": "5px" 
     }, { 
      queue: false, 
      duration: 500 
     }); 
     $(this).children('a').addClass('aHover'); 
    }, function() { 
     var el = $(this); 
     $(this).stop(true, true).animate({ 
      "border-bottom-width": "0px" 
     }, { 
      queue: false, 
      duration: 500 
     }); 
     $(this).children('a').removeClass('aHover'); 
    }); 
}); 

改變,

  1. mouseover事件mouseenter,因爲它是在你的情況下,更合適的
  2. 改變mouseenter/mouseleavehover
  3. 更改爲+=5px,-=5px5px0px
  4. 添加.stop(true, true)以確保動畫已完成且隊列已清除。
+0

不過,現在當你將鼠標放在LI元素中的標籤上時,它認爲鼠標是左的,那麼如何在懸停在標籤上時維護邊界? – 2012-04-27 18:15:04

+0

@ No1_Melman查看更新的帖子和演示。 – 2012-04-27 18:23:16