javascript - 使用 ng-class 有条件地添加 CSS3 动画

标签 javascript angularjs css animation

我有两个 CSS3 动画,当我的 Controller 中的特定条件得到满足时,我将添加到 dom 中。当满足这些条件时,我目前正在使用 ng-class 引入不同的动画(摇动 Y 和摇动 X)。 (我只是包括相关的 js):

$scope.submitAnswer = function($index) {
    ...

    if ($index == current) {
        console.log('correct!');
        $scope.shaken = 'shakeY';
    }
    else {
        console.log('incorrect!');
        $scope.shaken = 'shakeX';
    }
}

这是相关的 HTML:

    <div 
        id="philosopher" 
        ng-class="shaken"
        ng-click="submitAnswer($index);" 
        ng-repeat="philosopher in philosophers">
        <img ng-src="images/{{philosopher.signifier}}.png" height="142px" width="auto" />
        <h2>{{philosopher.name}}</h2>
    </div>

这正如我所愿,但是,我发现我无法连续应用相同的动画类并让动画执行 - 我需要交替(在满足 if 语句和触发 else 之间切换).

我发现我可以使用自定义指令和 ngAnimate 来重复触发动画,但是我不知道如何根据 if else 的结果实现单独的动画 这是指令之一:

app.directive('shake', function($animate) {
    return {
        restrict: 'A',
        scope: false,
        link: function(scope, element, attrs) {

            element.bind('click', function() {

                $animate.addClass(element, 'shakeX', function() {
                    $animate.removeClass(element, 'shakeX');
                });

            });
        }
    };
});

我怎样才能不断地将 shakeX 和 shakeY 重新应用到 ng-class,或者我怎样才能只根据 if else 语句的结果使用我的指令?

编辑

终于搞定了!感谢您的帮助,最终的工作是以正确的方式在 if 语句中实现超时功能。 (我知道从技术上讲你不应该在 if 语句中使用函数 [我认为这是一条规则,对吗?],但我终于让它工作了!)这基本上就是我结束的地方:

    if ($index == current) {
        console.log('correct!');
        $timeout(function() {
            $scope.shaken = 'shakeY'
        })
    }
    else {
        console.log('incorrect!');
        $timeout(function() {
            $scope.shaken = 'shakeX'
        })
    }

最佳答案

我不认为你需要一个指令来实现你想要的。问题是当您在作用域中分配相同的值时,如果它具有相同的值,则不会触发作用域属性的观察器。您需要做的是将 scope 属性的值从诱饵值或空值更改,然后使用 $timeout 将值从诱饵值更改为原始值。

像这样:

DEMO

HTML

<div ng-class="shake" ng-click="shakeX()">Shake X</div>
<div ng-class="shake" ng-click="shakeY()">Shake Y</div>

JavaScript

$scope.shakeX = function() {
  $scope.shake = '';
  $timeout(function() {
    $scope.shake = 'shakeX';
  })
};

$scope.shakeY = function() {
  $scope.shake = '';
  $timeout(function() {
    $scope.shake = 'shakeY';
  })
};

关于javascript - 使用 ng-class 有条件地添加 CSS3 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26023019/

相关文章:

javascript - 如何使用 javascript 以随机顺序显示文件夹中的图像?

css - 如何在 elm 中使用单独的 CSS 文件?

html - 如何使 div 容器响应?

javascript - 如何使用 javascript 在 svg 文本元素上设置 glyph-orientation-horizo​​ntal 属性?

javascript - JQuery 面板 - 左侧菜单高度

javascript - 具有返回值的验证函数

android - 如何从 Ionic/Angularjs 项目中的 localStorage 检索用户详细信息

javascript - 如何使用async :false in angular js 1. 6,让java脚本下一行执行get block until $http completed

javascript - 对象、原型(prototype)继承和失败的函数

angularjs - 在 AngularJS 指令中定义动态 Controller ?