2012-12-11 53 views

回答

25

玩这个,它看起来像CSS动画效果最好。

.open > .dropdown-menu { 
    animation-name: slidenavAnimation; 
    animation-duration:.2s; 
    animation-iteration-count: 1; 
    animation-timing-function: ease; 
    animation-fill-mode: forwards; 

    -webkit-animation-name: slidenavAnimation; 
    -webkit-animation-duration:.2s; 
    -webkit-animation-iteration-count: 1; 
    -webkit-animation-timing-function: ease; 
    -webkit-animation-fill-mode: forwards; 

    -moz-animation-name: slidenavAnimation; 
    -moz-animation-duration:.2s; 
    -moz-animation-iteration-count: 1; 
    -moz-animation-timing-function: ease; 
    -moz-animation-fill-mode: forwards; 
} 
@keyframes slidenavAnimation { 
    from { 
    opacity: 0; 
    } 
    to { 
    opacity: 1; 
    } 
} 
@-webkit-keyframes slidenavAnimation { 
    from { 
    opacity: 0; 
    } 
    to { 
    opacity: 1; 
    } 
} 

您可以添加其他CSS属性以制作更复杂的动画。举例来说,我一直在玩左:-30 - >左:0

+0

目前还没有时间测试这个对不起,我不想给你打勾,但很高兴看到它看起来可以在没有JavaScript的情况下完成。谢谢 – byronyasgur

+0

再次我没有测试过这个,但从票数看来它必须工作,显然css是可取的,所以我正在回应滴答 – byronyasgur

+2

我不知道为什么有人不测试他需要什么解决方案。 –

6

也许做这样的事情用jQuery:

$(function() { 
    $('.dropdown-toggle').click(function() { 
     $(this).next('.dropdown-menu').fadeToggle(500); 
    }); 
});​ 

可以赤这里的小提琴:http://jsfiddle.net/5zr4r/15/

更新:我忘了说,你应该从ul删除fadein

+0

由于是这是朝着正确方向迈出的一步。它影响目前的所有下拉菜单,但我确信我可以以某种方式用$(this)对其进行修改......其他问题是,当我点击区域外时它不会取消,但我确信我可以确定出...谢谢 – byronyasgur

+0

不客气!我更新了我的答案,因此它只影响右侧下拉菜单。 – Dim13i

+0

谢谢......实际上,虽然你发布的代码对我来说很好,但是在堆栈溢出中呈现文本时可能会出现问题......因为当我复制该代码块时,它会混淆页面,但是当我只是复制中间线,它工作正常...我认为这与最后两行有关,我无法弄清楚,但你可能想在编辑下查看它,看看帖子中是否有任何奇怪的字符。如果你不能找到它,那么我相信任何未来的访问者都可以输入最后2行,而不是复制它。再次感谢 – byronyasgur

0

你可以试试这个:

// Add fadeToggle animation to dropdown  
$('.dropdown').on('show.bs.dropdown', function(e) { 
    $(this).find('.dropdown-menu').first().stop(true, true).fadeToggle(500); 
}); 

// Add fadeToggle animation to dropdown 
$('.dropdown').on('hide.bs.dropdown', function(e) { 
    $(this).find('.dropdown-menu').first().stop(true, true).fadeToggle(500); 
}); 

它利用引导现有show.bs.dropdownhide.bs.dropdown功能,并改变下拉效应“淡入淡出“而不是”出现“。如果您想使用“幻灯片”,则还可以将fadeToggle()更改为slideDown()。希望这可以帮助。

这里是小提琴:http://jsfiddle.net/ck5c8/

+0

请解释如何解决手头的问题,以帮助未来的访问者了解这个问题。 – War10ck

+0

我更新了代码,并更好地解释了它如何通过OP解决问题。 –

5

我找到了很好的解决方案过于:

// Add slideDown animation to dropdown 
$('.dropdown').on('show.bs.dropdown', function(e){ 
    $(this).find('.dropdown-menu').first().stop(true, true).slideDown(); 
}); 

// Add slideUp animation to dropdown 
$('.dropdown').on('hide.bs.dropdown', function(e){ 
    $(this).find('.dropdown-menu').first().stop(true, true).slideUp(); 
}); 

例子:http://codepen.io/danielyewright/pen/EvckL

11

我想提出一个现代的,只有CSS的方法:

.dropdown-menu.fade { 
    display: block; 
    opacity: 0; 
    pointer-events: none; 
} 
.open > .dropdown-menu.fade { 
    pointer-events: auto; 
    opacity: 1; 
} 

这允许.fade处理tra nsition动画,但.open是控制不透明度和指针状态的东西。

+0

最佳答案,快速,简单,高效:D –

+1

这个答案比@Benjamin提供的答案更有效。只要确保将类“.fade”添加到与“.dropdown-menu”类相同的元素。 - 它处理淡入和淡出,选择的只会淡入,并在关闭时立即消失。 - 这个答案是更少的代码。 –

1

小的调整,杰森Featheringham的answer,在引导工作4

.dropdown-menu.fade { 
    display: block; 
    opacity: 0; 
    pointer-events: none; 
} 

.show > .dropdown-menu.fade { 
    pointer-events: auto; 
    opacity: 1; 
}