<rect>
을 생성하고 ng-repeat 지시문을 사용하여 <animate>
자식을 생성합니다.SVG ng-repeat'ed 요소의 SMIL 애니메이션은 페이지로드에서만 발생합니다.
페이지로드시 애니메이션이 올바르게 트리거되고 모든 것이 예상대로 발생합니다. 그러나 새로 추가 할 때 <rect>
애니메이션이 발생하지 않습니다.
다음 코드 조각
이 동작을 보여줍니다function Controller($scope) {
$scope.rects = [];
var spacing = 5;
var width = 10;
var height = 100;
var x = 10;
var y = 10;
$scope.newRect = function() {
$scope.rects.push({
x: x,
y: y,
width: width,
height: height
});
x += spacing + width;
};
for (var i = 0; i < 5; i++) {
$scope.newRect();
}
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app ng-controller="Controller">
<svg width="1000" height="200">
<rect ng-repeat="rect in rects" x="{{rect.x}}" y="{{rect.y}}" height="{{rect.height}}" width="{{rect.width}}">
<animate attributeName="y" from="{{rect.height}}" to="{{rect.y}}" dur="1s" repeatCount="1" />
<animate attributeName="height" from="0" to="{{rect.height}}" dur="1s" repeatCount="1" />
</rect>
</svg>
<button ng-click="newRect()">One more</button>
</div>
예를 로딩시를, 4 <rect>
는 아래쪽에서 위쪽 애니메이션 나타납니다. 그러나 "One more"버튼을 누르면 새로운 <rect>
이 애니메이션없이 추가됩니다 (Firefox 35 및 Chrome 38에서 동작 테스트 됨).
<rect>
의 새 애니메이션을 어떻게 트리거 할 수 있습니까?
나는'beginElement()'접근법을 시도했다. 그러나, 나는 그것을 호출하기 전에''요소에 대한 자바 스크립트 액세스가 필요하기 때문에'setTimeout (fn, 0)'에 호출을 래핑해야했습니다. 경우에 따라 애니메이션이 실행되기 전에 사용자가 전체 ''을 볼 수있는 깜박임이 발생합니다. 이제는 단락을 쓰고 무의식적으로 답장을 보내고 싶습니다. 나는 (a) 접근 방식으로 무언가를 만들 수 있는지 알아 보려고 노력할 것이다. –
Daniel
@ 다니엘 아직 자신을 알아 내지 못했다면 수정 사항을 확인하십시오. – AmeliaBR
그 해결책을 시도했지만, 무의식적으로'DOMNodeInserted' 대신에'this.DOMNodeInserted'를 썼습니다. 편집 해 주셔서 감사합니다. 엄청난 도움이되었습니다. 다른 점에 관해서는 : 10px 오프셋은 실제로 의도하지 않았지만 코드에서 수정했지만 문제의 중요성은 충분하지 않다고 판단했습니다. 두 번째 사항은 아니요, 오래된 IE는이 시점에서 문제가되지 않습니다. 다행히도. – Daniel