javascript - Bootstrap 下拉菜单 - shown.bs.dropdown 事件在 css 转换后未触发

标签 javascript jquery html css twitter-bootstrap

我在 Bootstrap 下拉列表的 shown.bs.dropdown 事件处理程序中遇到了这个问题。在演出事件中,我设置了动画类,我希望在动画完成后删除该类。不幸的是,该事件在演出事件结束后立即触发。

我尝试在运行时在属性中应用该类(认为这样 Bootstrap 将了解要应用的 css 转换并延迟显示的事件),但没有结果。动画类由 animate.css 库提供。我设置了一个 fiddle 来展示我的问题。 -http://jsfiddle.net/u08bt6ck/

这是我的标记:

<ul class="nav navbar-nav">
    <li id="userMenu" class="dropdown">
        <a href="#" data-toggle="dropdown" class="dropdown-toggle">Open me</a>
        <ul class="dropdown-menu">
            <li><a href="#"><i class="fa fa-sliders"></i>lnk 1</a></li>
            <li><a href="#"><i class="fa fa-user"></i>lnk 2</a></li>
            <li><a href="#"><i class="fa fa-clock-o"></i>lnk 3</a></li>
        </ul>
    </li>
</ul>

这是 js:

$('#userMenu').on({
    "show.bs.dropdown": function () {
        $('.dropdown-menu', this).addClass('animated fadeInDown');
    },
    "shown.bs.dropdown": function () {
        $('.dropdown-menu', this).removeClass('animated fadeInDown');
    },
    "hide.bs.dropdown":  function() {
        $('.dropdown-menu', this).addClass('animated fadeOutDown');
    },
    "hidden.bs.dropdown": function () {
        $('.dropdown-menu', this).removeClass('animated fadeOutDown');
        //alert('ni ca s-a terminat');
    }
});

最佳答案

对于遇到此问题的每个人,我将在此处发布我如何设法解决此问题。

基本上,我在用户单击时在类中设置淡入淡出,并让它在那里直到菜单关闭。如果菜单开始关闭,则删除 fadeIn 类,添加 fadeOut 类,并且在动画完成后(由 jquery .on([animationEndSelectors]) 处理),我删除 fadeOut 类并关闭子菜单(通过旋转ul 公开课)。

var animationEndSelectors = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';
var inAnimation = 'animated ' + 'fadeInDown';
var outAnimation = 'animated ' + 'fadeOutUp';

$('#userMenu').on({
    "show.bs.dropdown": function () {
        $('.dropdown-menu', this).addClass(inAnimation);
    },
    "hide.bs.dropdown":  function() {
        var ddl = this;

        $(ddl).addClass('closing');
        $('.dropdown-menu', this).removeClass(inAnimation);
        $('.dropdown-menu', this).addClass(outAnimation);
        $('.dropdown-menu', this).one(animationEndSelectors, function () {
            $('.dropdown-menu', ddl).removeClass(outAnimation);
            $(ddl).removeClass('open closing');
        });
        return false;
    }
});

关于javascript - Bootstrap 下拉菜单 - shown.bs.dropdown 事件在 css 转换后未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28541887/

相关文章:

javascript - HTMLStyleElement 和 CSSStyleElement 有什么区别

jQuery 相当于 ExtJS 函数extend()、apply() 和namespace()?

html - 在无序列表中的元素之后添加竖线分隔符,除非该元素是一行中的最后一个

javascript - 来自其他页面时,该部分将被标题重叠

javascript - 为什么我的谷歌图表看起来不对

javascript - 提高 JQuery 查找的性能

javascript - 为什么添加一个类会影响使用 JS/jQuery 在同一循环中报告的高度

javascript - 刷新时淡出并进入 iframe?

javascript - 当页面滚动到页脚时,如何使我的粘性侧边栏向上滚动?

html - Bootstrap - 在导航栏右侧添加两个文本链接