3

我有两个 div,一个开始是空的,另一个有一些预定义的项目。单击一个列表中的项目时,另一个列表会将项目添加到其中。

我想要实现的是为一个列表中的项目设置动画,使其看起来物理移动到另一个列表。(我希望项目从右向左移动)。我不太了解 CSS 动画或 AngularJS 动画。在 jQuery 中,我可以在 div id 上调用 $().animate() 来修改属性。

希望达到

我将如何在 AngularJS 中做同样的事情?

JS:

var app = angular.module('app', []);

app.controller('Ctrl', function ($scope) {

  $scope.selectedItems = [];
  $scope.items = ['a', 'b', 'c'];

});

HTML:

<div ng-controller="Ctrl">

<div class='container'> 
  <div class='inline selected-container' >
    <div ng-repeat='selected in selectedItems track by $index'> <!-- I would like items to appear here after items from other container have finished moving -->
      {{selected}}
    </div>
  </div>

  <div class="inline">
    <!-- I would like to push these items left on click -->
    <div class='inline box' ng-repeat="item in items" ng-click="selectedItems.push(item);"> 
      {{item}}
    </div>
  </div>
</div>

</div>

这是我到目前为止的链接:

http://plnkr.co/edit/TZPmsCcR1xMcPW4eIEf3?p=preview

4

1 回答 1

1

我在此页面上阅读了关于 ng-animate 的不错解释:http ://www.jvandemo.com/how-to-create-cool-animations-with-angularjs-1-2-and-animate-css/

本质上,您需要在 CSS 中定义动画,然后将 ng-enter 和 ng-leave 附加到要实现这些动画的类中。

/* Define your Animation , or just download animate.css which has all these defined*/ 
@-webkit-keyframes fadeOutLeft {
  0% {
    opacity: 1;
    -webkit-transform: translateX(0);
    transform: translateX(0);
  }

  100% {
    opacity: 0;
    -webkit-transform: translateX(-20px);
    transform: translateX(-20px);
  }
}

@keyframes fadeOutLeft {
  0% {
    opacity: 1;
    -webkit-transform: translateX(0);
    -ms-transform: translateX(0);
    transform: translateX(0);
  }
  100% {
    opacity: 0;
    -webkit-transform: translateX(-20px);
    -ms-transform: translateX(-20px);
    transform: translateX(-20px);
  }
}
.fadeOutLeft {
  -webkit-animation-name: fadeOutLeft;
  animation-name: fadeOutLeft;
}

您必须将动画附加到 CSS 中的元素:

/* Apply your animation, which will run on ng-repeat, ng-hide, ng-show, etc */
.item {
   /* this is the element you're animating  */
}
.item.ng-enter {  /* attach ng-enter */
    -webkit-animation: fadeInLeft 1s;
    -moz-animation: fadeInLeft 1s; 
    -ms-animation: fadeInLeft 1s;
    animation: fadeInLeft 1s;
}
.item.ng-leave { /* attach ng-leave */
    -webkit-animation: fadeOutLeft 1s;  /*  */
    -moz-animation: fadeOutLeft 1s;
    -ms-animation: fadeOutLeft 1s; 
    animation: fadeOutLeft 1s;
}

更新:
http ://plnkr.co/edit/TZPmsCcR1xMcPW4eIEf3?p=preview

于 2014-03-21T18:22:32.990 回答