我正在构建一个包含动画的应用程序,我需要它更好地工作。我希望能够以指定的动画间隔浏览一系列 div 并一次显示一个。我希望每个系列都有自己的速度和自己的 div。
这是我到目前为止所拥有的(也在下面复制):http: //jsfiddle.net/ollerac/shkq7/
基本上,我正在寻找一种将 setInterval 放在 animatedBox 的属性上的方法,这样我就可以使用自定义属性创建一个新的 animatedBox 。但是每次我尝试这样做时,它都会中断。
HTML
<div ng-app ng-controller="BoxController">
<div class="layer" ng-repeat="layer in animatedBox.layers" ng-style="{ 'backgroundColor': layer.color}" ng-show="layer == animatedBox.selectedLayer"></div>
</div>
JAVASCRIPT
function buildBox () {
return {
color: '#' + (Math.random() * 0xFFFFFF << 0).toString(16)
}
}
function BoxController ($scope) {
$scope.animatedBox = {
layers: [],
selectedLayer: null
};
for (var i = 0; i < 5; i++) {
$scope.animatedBox.layers.push(buildBox());
}
var i = -1;
setInterval(function () {
$scope.$apply(function() {
i++;
if (i < $scope.animatedBox.layers.length) {
$scope.animatedBox.displayThisLayer = $scope.animatedBox.layers[i];
} else {
i = 0;
$scope.animatedBox.selectedLayer = $scope.animatedBox.layers[i];
}
});
}, 500);
}
CSS
.layer {
width: 30px;
height: 30px;
position: absolute;
}
*更新*
这里有更多关于我想做的事情:
更新 jsFiddle:http: //jsfiddle.net/ollerac/shkq7/2/
function buildBox () {
return {
color: '#' + (Math.random() * 0xFFFFFF << 0).toString(16)
}
}
function BoxController ($scope) {
$scope.animatedBox = {
layers: [],
selectedLayer: null,
selectedLayerIndex: -1,
updateSelectedLayer: function () {
var self = this;
if (self.layers.length) {
$scope.$apply(function() {
self.selectedLayerIndex++;
if (self.selectedLayerIndex < self.layers.length) {
self.selectedLayer = self.layers[self.selectedLayerIndex];
} else {
self.selectedLayerIndex = 0;
self.selectedLayer = self.layers[self.selectedLayerIndex];
}
});
}
}
};
for (var i = 0; i < 5; i++) {
$scope.animatedBox.layers.push(buildBox());
}
setInterval(function () {
$scope.animatedBox.updateSelectedLayer();
}, 500);
}
所以现在对象更新了它自己的selectedLayer
属性。但是我仍然需要调用单独调用更新的 setInterval 以使其更新。但我希望对象能够自我更新并完全独立。你能想出一个好方法来做到这一点,因为我真的很挣扎......
我想这更像是一个一般的 javascript 问题,但我认为可能有一种 Angular 方法来处理这种情况,比如使用指令或其他合适的方法。
任何建议将不胜感激。