【发布时间】:2016-04-16 06:37:27
【问题描述】:
我正在尝试为屏幕外的图块列表设置动画,同时在屏幕上为新的图块列表设置动画。
我正在使用 Angular 的 ng-for 循环遍历一组可见项目,因此从技术上讲只有一个列表,但 Angular 的 ngAnimate 模块使被驱逐的项目保持活动状态,直到动画完成。
我的问题是,每当两个图块列表在动画中间同时出现在屏幕上时,一个就会溢出并最终落在另一个之下。
这是正在发生的事情:
这就是我想要它做的:
我尝试过使用 CSS 转换、绝对定位,但我似乎无法正确处理。
这里有一个可行的例子:http://jsfiddle.net/soethzfm/7/
(function() {
var app = angular.module("animationApp", ["ngAnimate"]);
app.controller('FrameController', ['$scope',
function($scope) {
$scope.message = 'Hello world';
$scope.items = [];
$scope.visibleItems = [];
for (var i = 3; i < 9; i++) {
$scope.items.push({
name: 'Item ' + (i - 2),
color: "#" + (i) + "0" + (i % 5) + "0" + (i % 4) + '0'
});
}
$scope.firstThree = true;
$scope.selectNextItems = function() {
if ($scope.firstThree) {
$scope.firstThree = false;
$scope.visibleItems = [$scope.items[0], $scope.items[1], $scope.items[2]];
} else {
$scope.firstThree = true;
$scope.visibleItems = [$scope.items[3], $scope.items[4], $scope.items[5]];
}
}
$scope.selectNextItems();
}
]);
})()
.item-container {
width: 400px;
border: 1px solid red;
overflow: hidden;
}
.item {
color: white;
width: 100px;
height: 150px;
border: 5px solid #F3F5F6;
display: inline-block;
position: relative;
cursor: pointer;
}
.item:hover {
padding: 2px;
border: 3px solid blue;
}
/* Animations */
.item.ng-move,
.item.ng-enter,
.item.ng-leave {
-webkit-transition: 1400ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
-moz-transition: 1400ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
-ms-transition: 1400ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
-o-transition: 1400ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
transition: 1400ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
}
.item.ng-enter,
.item.ng-move {
left: -100%;
}
.item.ng-enter.ng-enter-active,
.item.ng-move.ng-move-active {
left: 0;
}
.item.ng-leave {
right: 0;
}
.item.ng-leave.ng-leave-active {
right: -100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular-animate.min.js"></script>
<div ng-app="animationApp">
<div ng-controller="FrameController as vm">
<button ng-click="selectNextItems()">Next Page</button>
<div class="item-container">
<div class="item" ng-repeat="item in visibleItems" ng-style="{'background-color': item.color}">
{{item.name}}
</div>
</div>
</div>
</div>
【问题讨论】:
标签: html css angularjs css-animations ng-animate