如何在angularjs中使用ng repeat动画
how to use animation with ng-repeat in angularjs
我有一个列表,我使用ng repeat对其进行迭代:用户可以通过使用向上箭头和向下箭头图标与列表项交互,单击它们时,我只需更改"列表"中元素的顺序,这就是angular建议更改模型和更改自动反映在视图中的内容。
<div ng-repeat="item in list">
{{item.name}}
<div class="icon-up-arrow" ng-click="moveUp($index);"></div>
<div class="icon-down-arrow" ng-click="moveDown($index);"></div>
</div>
moveUp中的逻辑:-
$scope.moveUp= function(position){
var temp=list[position-1];
list[position-1]=list[position];
list[position=temp];
};
上面的代码工作得很好,类似的是向下移动项目的逻辑。但我想解决的问题是如何制作动画?我知道angular自己负责绑定视图和模型,但当视图在按下向下箭头图标时更新时,有什么方法可以放入动画吗?
Marcel的评论如下:在AngularJS 1.2中,您不需要使用ng-animate
指令。相反:
- 包括
angular-animate[-min].js
- 使您的模块依赖于
ngAnimate
- 使用
.ng-enter
和.ng-enter-active
等类在CSS中定义转换 - 像往常一样使用
ng-repeat
HTML:
<div ng-app="foo">
<!-- Set up controllers etc, and then: -->
<ul>
<li ng-repeat="item in items">{{item}}</li>
</ul>
JavaScript:
angular.module('foo', ['ngAnimate']);
// controllers not shown
CSS:
li {
opacity: 1;
}
li.ng-enter {
-webkit-transition: 1s;
transition: 1s;
opacity: 0;
}
li.ng-enter-active {
opacity: 1;
}
在(别人的)Plunker中演示。
有关通过各种CSS类进行的详细信息,请参阅$animate的文档。
检查此链接http://www.nganimate.org/
-
您需要将ng animate属性声明给具有另一个更改DOM 的指令的元素
div ng-repeat="item in itens" ng-animate="{enter: 'animate-enter', leave: 'animate-leave'}"
-
您需要添加css转换或动画。
.animate-enter { -webkit-transition: 1s linear all; /* Chrome */ transition: 1s linear all; opacity: 0; } .animate-enter.animate-enter-active { opacity: 1; }
你可以在这里查看plnkr示例:http://plnkr.co/edit/VfWsyg9d7xROoiW9HHRM
作为最后一个答案的补充,当顺序发生变化时,有一个用于动画的ng移动类:
li {
opacity: 1;
}
li.ng-move {
-webkit-transition: 1s;
transition: 1s;
opacity: 0;
}
li.ng-move-active {
opacity: 1;
}
此处为最后文档。
如果由于减少插件数量而不希望使用"ngAnimate"模块,则可以通过使用ng init和自定义指令来归档简单的转换效果。
<li ng-repeat="item in items" class="item" item-init>{{item.name}}</li>
.item{
opacity:0;
-webkit-transition: all linear 300ms;
transition: all linear 300ms;
}
.item.visible{
opacity:1;
}
myApp.directive('itemInit', function ($compile) {
return function (scope, element, attrs) {
scope.initItem(element);
};
});
在您的控制器
$scope.initItem = function(el){
$timeout(function(){
angular.element(el).addClass('visible');
},0);
}
相关文章:
- ng init中的表达式无法使用ng repeat
- Angular ng repeat order将多个字段作为一个字段
- 访问ng repeat中的第一个项目
- Angular js+ng repeat+字母数字索引不起作用
- 如何正确应用Angularjs ng repeat
- AngularJS Navigation (li ng-repeat, create header li), DOM
- 如何使用ng repeat中的选定输入更新我的对象
- 无法使用ng repeat检索动态创建的JSON对象的属性
- 使用 ng-repeat访问 ng 表单元素/值
- Toggle Switch在包含ng model和ng repeat之后不进行切换
- 如何在ng repeat angular js中使用$index
- 在Angularjs中,我如何使用ng repeat、ng model和ng click来动态更改内容
- ng repeat在ng repeat-过滤器不工作
- 在ng repeat中使用带有orderBy的方法
- Angular JS ng-repeat
- 在ng repeat中使ng disabled为true
- AngularJS:如何在ng repeat中使用$index
- 复选框无法正常使用ng repeat,AngularJs
- 如何避免在HTML中使用ng repeat对url名称进行硬编码
- 替换ng repeat中的一些符号