【问题标题】:Toggle two classes with AngularJS / jqLite on click单击时使用 AngularJS / jqLit​​e 切换两个类
【发布时间】:2016-12-28 15:11:09
【问题描述】:

我不想通过切换类 slideInRightslideOutRight 来获得 slideIn / slideOut 动画一个 ul 元素。

我以不同的方式尝试过它,但它只适用于一个类名。

如何在第一次单击时添加类 slideInRight,在第二次单击时添加类 slideOutRight在我的 ul 元素上使用 dropdown-menu 类?

我试过这样:

angular.element('.dropdown-toggle').on('click', function(){
    angular.element('ul.dropdown-menu').toggleClass('slideOutRight slideInRight');
});

我做错了什么?

希望你能帮忙。


更新:

这是我的代码当前状态的Plunker。这样只有 slideInRight 动画有效。如果我再次单击该按钮,则 ul 会消失而没有 slideOutRight 动画。

怎么了?

【问题讨论】:

    标签: angularjs angularjs-scope angularjs-ng-click ng-class angular-ng-class


    【解决方案1】:

    您可能想尝试使用 Angular 的 ng-class

    我对 Angular 有点陌生,但我的做法是这样的:

    <ul class="dropdown-menu" ng-class="ulOpen ? 'slideOutRight' : 'slideInRight'">
    

    和js

    angular.element('.dropdown-toggle').on('click', function(){
        if($(this).hasClass('.slideOutRight')) {
            ulOpen = true;
        } else {
            ulOpen = false;
        }
    });
    

    【讨论】:

    • 感谢您对 ntgCleaner 的建议。与@jbrown 的方法一样,只有 SlideInRight 动画有效。当我再次单击按钮时,ul 消失,没有 slideOutRight 动画
    • 这是我代码当前状态的 Plunker:Plunker
    【解决方案2】:

    将 ulOpen 作为范围变量添加到您的控制器

    控制器

    $scope.ulOpen = false;
    

    HTML

    那么你应该依靠angularjs指令ng-click来设置ulOpen的值:

    <button class="dropdown-toggle" type="button" ng-click="ulOpen=!ulOpen">Toggle Class</button>
    

    和ng-class根据ulOpen的值切换class:

    <ul class="dropdown-menu" ng-class="slideOutRight: ulOpen, slideInRight: !ulOpen">
    

    一般来说,我会建议您尽可能找到纯 angularjs 解决方案。我发现很少有没有原生 angular 指令可以处理我在 jquery 中尝试做的事情的情况。

    【讨论】:

    • 感谢您的建议 jbrown。但这是只有 SlideInRight 动画有效的方式。当我再次单击按钮时,ul 消失,没有 slideOutRight 动画。
    • 这是我代码当前状态的 Plunker:Plunker
    • @Codehan25 - 问题不在于 ng-class 的使用,而是引导程序的下拉菜单类和动画的 slideOutRight/slideInRight 类发生了一些事情。您可以通过从 ul 元素中删除下拉菜单类来看到这一点。我不是 css 专家,但我猜想解决这个问题的唯一方法是破解 bootstrap 和动画 css 中的一个或两个。您可能需要编辑或重新发布您的问题以引起 css 专家的注意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2013-06-21
    相关资源
    最近更新 更多