Próbuję utworzyć wykres za pomocą SVG i dyrektywy kątowej, aby zmienić dynamiczne części. Teraz zrobiłem tak:animacja ścieżki SVG przy zmianie wartości
http://plnkr.co/edit/TcbK7kyzM3tapDISxndh?p=preview
app.directive('pieChart', function($document) {
return {
restrict: "E",
template: '<svg width="500" height="500">' +
'<path d="M100,200 a150,150 0 1,0 150,-150" stroke="black" stroke-width="10" fill="none"></path>' +
'</svg>',
scope: {
value: '='
},
link: function(scope, elem, attr) {
}
}
});
chcę mój wykres, aby wyglądać tak, kiedy to wartość 100%, a jeżeli wartość jest - powiedzmy - 45%, chciałbym lubię widzieć tę linię, ale tylko 45% jej długości od górnej środkowej. Prawdopodobnie muszę ponownie obliczyć wartość ścieżki ścieżki, ale chciałem zapytać, czy to możliwe, gdy zmieniam ścieżkę z JS, aby było animowane, podczas gdy zmienia się rozmiar?
Z góry dziękuję, lub jeśli ktoś z was zna dobry tutorial na ten temat, proszę go połączyć ze mną.
EDYCJA: Zmieniłem dyrektywę na prosty wykres słupkowy, ale jest to tylko na przykład, wiem, że można to zrobić bez SVG, ponieważ można zrobić to za pomocą div, ale chcę, aby wykres był bardziej złożony po.
Oto jsfiddle http://jsfiddle.net/fg9e7eo4/1/
w moim przykładzie, wykres wciąż animowanie i chciałbym, aby animować tylko raz i nie pozostają w tym punkcie.
Nawiasem mówiąc, jest to dyrektywa, że staram się, aby to działało:
testApp.directive('pieChart', function() {
var html =
'<svg width="510" height="20" style="background: #fff">' +
'<path d="{{path}}" stroke="red" stroke-width="10" fill="none">' +
'<animate dur="1s" repeatCount="indefinite" attributeName="d" values="{{path2}}"/>' +
'</path>' +
'</svg>';
return {
restrict: 'E',
template: html,
scope: {
'value': '='
},
link: function(scope, elem, attrs) {
scope.$watch('value', function(newValue, oldValue) {
scope.path = 'M 5 10, L ' + (newValue * 5) + ' 10';
scope.path2 = 'M 5 10, L ' + (oldValue * 5) + ' 10; M 5 10, L ' + (newValue * 5) + ' 10';
elem.children().children().beginElement();
});
}
};
});
Musisz $ obserwować wartość attr – Dylan
Otrzymuję wartość zaktualizowaną przez zakres i wywołany wewnątrz dyrektywy, ale nie wiem kiedy zmieniam ścieżkę wewnątrz szablonu, jak animować ścieżkę od ostatniego 'd 'do nowego –
Będziesz musiał zasadniczo zmodyfikować ścieżkę w odstępach za pomocą funkcji łagodzenia. Istnieją frameworki (jak snap lub d3), które mogą to dla ciebie zrobić - [tutaj] (http://bl.ocks.org/mbostock/31ec1817b2be2660c453) to przykład użycia d3. – user1620220