【问题标题】:Is it possible to get Twitter Bootstrap Dropdown menus to fade in?是否可以让 Twitter Bootstrap 下拉菜单淡入?
【发布时间】:2012-12-11 22:49:00
【问题描述】:

我试图让 Twitter Bootstrap 上的标准导航栏下拉菜单淡入而不是仅仅出现。我尝试添加 fadein 类,但它似乎没有消失。这是我的小提琴http://jsfiddle.net/byronyasgur/5zr4r/10/

我尝试过另一种方式 - 例如this question 上的答案,但由于某种原因,我无法使用 jquery 定位下拉触发器。

【问题讨论】:

    标签: jquery drop-down-menu twitter-bootstrap fadein


    【解决方案1】:

    玩弄这个,看起来 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 属性来制作更复杂的动画。比如我一直在玩left: -30 -> left: 0。

    【讨论】:

    • 目前没有时间对此进行测试,所以很抱歉,我不想给你打勾,但很高兴看到它似乎可以在没有 javascript 的情况下完成。谢谢
    • 再次,我还没有测试过这个,但从投票看来它必须工作,显然 css 是更可取的,所以我正在重新打勾
    • 我不确定为什么有人不测试他需要的解决方案。
    • 对于 Bootstrap 4.3x,您必须将这段代码第一行中的 .open > .dropdown-menu { 更改为 .show > .dropdown-menu { 效果很好!
    【解决方案2】:

    我想提交一个现代的、纯 CSS 的方法:

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

    这允许.fade 处理过渡动画,但.open 控制不透明度和指针状态。

    【讨论】:

    • 最佳答案,快速,简单,有效:D
    • 此答案比@Benjamin 提供的所选答案更有效。只需确保将“.fade”类添加到“.dropdown-menu”类所在的相同元素。 - 它处理淡入和淡出,所选的只淡入并在关闭时立即消失。 - 这个答案是更少的代码。
    • 在bootstrap 4中,你必须使用.open > .dropdown-menu.fade
    【解决方案3】:

    对 Jason Featheringham 的 answer 进行小调整,可在 Bootstrap 4 中使用。

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

    【讨论】:

    • 请注意,这不适用于键盘导航,因为您通过将 opacity 设置为 0 而不是将 display 设置为 none 来隐藏关闭的菜单。因此,如果您使用键盘切换,焦点将转移到关闭菜单中的项目,而通常它会跳过它们。
    【解决方案4】:

    也许用 jQuery 做这样的事情:

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

    你可以在这里检查小提琴:http://jsfiddle.net/5zr4r/15/

    更新:我忘了说你应该从ul 中删除fade in

    【讨论】:

    • 谢谢,是的,这是朝着正确方向迈出的一步。它目前会影响所有下拉菜单,但我确定我可以用 $(this) 以某种方式对其进行修改...另一个问题是当我在该区域外单击时它不会取消,但我确定我可以弄清楚出去...谢谢
    • 不客气!我已经更新了我的答案,所以它只影响正确的下拉菜单。
    • 谢谢...实际上,虽然您发布的代码对我很有用,但在堆栈溢出时此处的文本呈现可能有问题...因为当我复制块时把页面弄乱了,但是当我刚刚复制到中间行时它工作正常......我认为它与最后两行有关,我无法弄清楚但你可能想在编辑下看看它看看帖子里有没有奇怪的字符。如果你找不到它,那么我相信任何未来的访问者都可以在最后两行输入,而不是复制它。再次感谢
    • 我找不到任何错误,可能是因为我从jsfiddle复制了代码...
    • 我不担心,我只是想我会提一下,以防将来有人复制和粘贴它……也可能是我这边的东西。
    【解决方案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

    【讨论】:

      【解决方案6】:

      你可以试试这个:

      // 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); 
      });
      

      它利用了 Bootstrap 现有的 show.bs.dropdownhide.bs.dropdown 函数,并将下拉效果更改为“淡入”而不是“出现”。如果您希望“幻灯片”生效,您也可以将fadeToggle() 更改为slideDown()。希望这会有所帮助。

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

      【讨论】:

      • 请解释这如何解决手头的问题,以帮助未来的访问者理解这个问题。
      • 我已经更新了代码并更好地解释了它是如何通过 OP 解决问题的。
      猜你喜欢
      • 1970-01-01
      • 2012-02-21
      • 2023-03-03
      • 2015-02-15
      • 1970-01-01
      • 2012-03-11
      • 2012-04-03
      • 2012-04-09
      • 1970-01-01
      相关资源
      最近更新 更多