簡體   English   中英

如何改善jQuery下拉菜單動畫

[英]How to improve jQuery drop down menu animation

我已經使用slideUpslideDown函數創建了一個簡單的jQuery下拉菜單。 如果用戶將鼠標緩慢懸停在每一個上,讓前一個完成,則該方法有效,但實際上不會發生。

我將如何改進代碼,以便每個下拉列表都能順利過渡?

這是我的困境的工作提琴: jsfiddle ,下面是代碼:

的HTML

<div id="header">
  <a id="item1" class="item" href="">Item 1</a>
  <a id="item2" class="item"  href="">Item 2</a>
</div>

<div id="box1">box1</div>
<div id="box2">box2</div>

的CSS

#header{
    width:100%;
    height:50px;
    background:blue;
    text-align:right;
}

.item{
    color:#fff;
    width:50px;
    height:50px;
    display:inline-block;
    background:gray;
}

#box1{
    width:200px;
    height:100px;
    background:gray;
    display:none;
    float:right;
}

#box2{
    width:200px;
    height:100px;
    background:gray;
    display:none;
    float:right;
}

jQuery的

$('#item1').hover(function(){
   $('#box1').stop().slideDown();
}, function(){
   $('#box1').stop().slideUp();
});

$('#item2').hover(function(){
   $('#box2').stop().slideDown();
}, function(){
   $('#box2').stop().slideUp();
});

指定滑動效果的速度。
可能的值:

  1. 毫秒
  2. 快速

檢查這種很棒的方法,讓您僅將鼠標懸停在動畫上而不是過濾后,這將解決您的問題。

 $('#box1').filter(':not(:animated)').slideUp();

關鍵是使用promise()直到動畫結束為止。

您可以在此處查看其工作方式: http//jsfiddle.net/mcXBB/4/

我還將您的事件更改為更靈活的方式,使您可以以更簡單的方式處理更多菜單位置:

<div id="header">
    <a id="item1" class="item" rel="#box1" href="">Item 1</a>
    <a id="item2" class="item" rel="#box2" href="">Item 2</a>
</div>

<div id="box1" class="boxes" >box1</div>
<div id="box2" class="boxes" >box2</div>

$('#header a')
.mouseenter( function() {
    var boxId = $(this).attr('rel');
    $('.boxes').promise().done( function() {
        $(boxId).slideDown();
    });

})
.mouseleave(function() {
    var boxId = $(this).attr('rel');
    $('.boxes').promise().done( function() {
        $(boxId).slideUp();
    });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM