添加幻灯片效果以引导下拉列表

Ben*_*eri 77 javascript twitter-bootstrap drop-down-menu

我正在使用bootstrap,我想在下拉菜单中添加动画.我想为它添加动画,向下滑动并在离开时备份.我怎么能这样做?

我试过的事情:

像这样更改Js下拉文件:

如何使Bootstrap的导航下拉滑动顺畅上下?

cog*_*ell 140

如果你更新到Bootstrap 3(BS3),他们已经暴露了许多很好的Javascript事件,可以将你想要的功能绑定到.在BS3中,此代码将为您的所有下拉菜单提供您正在寻找的动画效果:

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

  // Add slideUp animation to Bootstrap dropdown when collapsing.
  $('.dropdown').on('hide.bs.dropdown', function() {
    $(this).find('.dropdown-menu').first().stop(true, true).slideUp();
  });
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关BS3事件的信息,特别是有关下拉事件的信息.

  • 我的slideUp部分存在问题.在折叠模式(Chrome)中,下拉列表的宽度返回宽度,就像在全屏幕中查看一样.使用FF时,它向下滑动,但隐藏而不是向上滑动. (4认同)
  • 我也看到了这个问题,我实际上创建了另一个线程,专门询问它... http://stackoverflow.com/questions/26267207/bootstrap-3-dropdown-slidedown-strange-behavior-when-navbar-collapsed但我不知道我不知道如何解决它.我觉得Dropdown类在处理`hidden.bs.dropdown`事件之前没有等待转换完成. (3认同)
  • 这是有效的,做我想要的,但在移动视口,子菜单的下拉幻灯片消失得很快,看起来波涛汹涌 - 感谢分享! (3认同)

Mad*_*ash 62

此外,可以避免使用JavaScript进行下拉效果,并使用CSS3过渡,将这一小段代码添加到您的样式中:

.dropdown .dropdown-menu {
    -webkit-transition: all 0.3s;
    -moz-transition: all 0.3s;
    -ms-transition: all 0.3s;
    -o-transition: all 0.3s;
    transition: all 0.3s;

    max-height: 0;
    display: block;
    overflow: hidden;
    opacity: 0;
}

.dropdown.open .dropdown-menu { /* For Bootstrap 4, use .dropdown.show instead of .dropdown.open */
    max-height: 300px;
    opacity: 1;
}
Run Code Online (Sandbox Code Playgroud)

这种方式唯一的问题是你应该手动指定max-height.如果设置一个非常大的值,您的动画将非常快.

如果您知道下拉列表的大致高度,它就像一个魅力,否则您仍然可以使用javascript设置精确的最大高度值.

这是一个小例子:DEMO


!在此解决方案中存在填充的小错误,请查看Jacob Stamm对解决方案的评论.

  • 好的解决方案 不幸的是,有一个小错误.下拉列表中的第一项仍然是可点击的,即使它已折叠也是如此.您可以将鼠标悬停在折叠下拉列表的略微下方.在这种情况下没什么大不了的,因为你的第一个选项是纯文本.然而,当它是一个链接时,这是一个问题.我的解决方案是"动画"可见性,但在其他内容完成动画后延迟发生.看看:https://jsfiddle.net/stamminator/kjLe1tfs/1/ (8认同)
  • 很好的解决方案,欣赏它. (2认同)

Yoh*_*ohn 23

我正在做类似的事情但是在悬停而不是点击..这是我正在使用的代码,你可能能够稍微调整它以使其在点击上工作

$('.navbar .dropdown').hover(function() {
  $(this).find('.dropdown-menu').first().stop(true, true).delay(250).slideDown();
}, function() {
  $(this).find('.dropdown-menu').first().stop(true, true).delay(100).slideUp()
});
Run Code Online (Sandbox Code Playgroud)


小智 15

我不知道我是否可以碰到这个帖子,但我想出了一个快速解决当开放类被删除太快时发生的视觉错误.基本上,它只是在slideUp事件中添加一个OnComplete函数并重置所有活动的类和属性.是这样的:

结果如下:Bootply示例

使用Javascript/jQuery的:

$(function(){
    // 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){
        e.preventDefault();
        $(this).find('.dropdown-menu').first().stop(true, true).slideUp(400, function(){
            //On Complete, we reset all active dropdown classes and attributes
            //This fixes the visual bug associated with the open class being removed too fast
            $('.dropdown').removeClass('show');
            $('.dropdown-menu').removeClass('show');
            $('.dropdown').find('.dropdown-toggle').attr('aria-expanded','false');
        });
    });
});
Run Code Online (Sandbox Code Playgroud)


Ved*_*ant 10

这是我的幻灯片和淡入淡出效果的解决方案:

   // Add slideup & fadein animation to dropdown
   $('.dropdown').on('show.bs.dropdown', function(e){
      var $dropdown = $(this).find('.dropdown-menu');
      var orig_margin_top = parseInt($dropdown.css('margin-top'));
      $dropdown.css({'margin-top': (orig_margin_top + 10) + 'px', opacity: 0}).animate({'margin-top': orig_margin_top + 'px', opacity: 1}, 300, function(){
         $(this).css({'margin-top':''});
      });
   });
   // Add slidedown & fadeout animation to dropdown
   $('.dropdown').on('hide.bs.dropdown', function(e){
      var $dropdown = $(this).find('.dropdown-menu');
      var orig_margin_top = parseInt($dropdown.css('margin-top'));
      $dropdown.css({'margin-top': orig_margin_top + 'px', opacity: 1, display: 'block'}).animate({'margin-top': (orig_margin_top + 10) + 'px', opacity: 0}, 300, function(){
         $(this).css({'margin-top':'', display:''});
      });
   });
Run Code Online (Sandbox Code Playgroud)


小智 8

点击它可以使用下面的代码完成

$('.dropdown-toggle').click(function() {
  $(this).next('.dropdown-menu').slideToggle(500);
});
Run Code Online (Sandbox Code Playgroud)


小智 7

我正在使用上面的代码,但我已经通过slideToggle更改了延迟效果.

它会在悬停时通过动画滑动下拉列表.

$('.navbar .dropdown').hover(function() {
    $(this).find('.dropdown-menu').first().stop(true, true).slideToggle(400);
    }, function() {
    $(this).find('.dropdown-menu').first().stop(true, true).slideToggle(400)
    });
Run Code Online (Sandbox Code Playgroud)


Zim*_*Zim 6

更新2018年Bootstrap 4

在Boostrap 4中,.open该类已替换为.show。我想仅使用CSS过渡来实现此功能,而无需额外的JS或jQuery ...

.show > .dropdown-menu {
  max-height: 900px;
  visibility: visible;
}

.dropdown-menu {
  display: block;
  max-height: 0;
  visibility: hidden;
  transition: all 0.5s ease-in-out;
  overflow: hidden;
}
Run Code Online (Sandbox Code Playgroud)

演示:https//www.codeply.com/go/3i8LzYVfMF

注意:max-height可以将其设置为足以容纳下拉菜单内容的任何大值。


Him*_*han 5

对于Bootstrap 5,可以使用简单的 keframe 动画来完成简单而美观的动画幻灯片。

@keyframes slideIn {
    0% {
        transform: translateY(1rem);
        opacity: 0;
    }
    100% {
        transform: translateY(0rem);
        opacity: 1;
    }
}

.slideIn {
    -webkit-animation-name: slideIn;
    animation-name: slideIn;
    animation-duration: 0.4s;
    animation-fill-mode: both;
}
Run Code Online (Sandbox Code Playgroud)
<li class="nav-item dropdown">
          <a class="nav-link dropdown-toggle m-2" href="/" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
            Dropdown
          </a>
          <ul class="dropdown-menu slideIn rounded-2 p-3" aria-labelledby="navbarDropdown">
            <li><a class="dropdown-item" href="/">Action</a></li>
            <li><a class="dropdown-item" href="/">Another action</a></li>
            <li><hr class="dropdown-divider"/></li>
            <li><a class="dropdown-item" href="/">Something else here</a></li>
          </ul>
        </li>
Run Code Online (Sandbox Code Playgroud)