我正嘗試使用SVG和角度指令來創建圖形以更改動態部分。現在,我已經做到了這一點:更改值時動畫SVG路徑
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) {
}
}
});
我希望我的圖表看起來像這樣當它是100%的值,而當值是 - 讓我們說 - 45%,我會喜歡看這條線,但只有45%從頂尖中心開始。我可能不得不重新計算路徑的路徑值,但我想問一下,是否有可能在改變路徑時使用JS使其在改變大小時變爲動畫效果?
預先感謝您,或者如果您有任何人知道這個東西的好教程,請鏈接到我。
編輯:我改變了指令爲一個簡單的條形圖,但這只是例如,我知道這可以做到沒有SVG,因爲你可以使用divs,但我希望圖表後更復雜。
這裏有一個的jsfiddle http://jsfiddle.net/fg9e7eo4/1/
在我的例子,圖表一直保持一個,我想使它動畫只有一次,不是停留在這一點上。
順便說一句,這是我想出來,使其工作指令:
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();
});
}
};
});
您需要$觀察attr – Dylan 2014-12-03 18:46:23
的值我得到的值是我在指令中調用的範圍更新的值,但我不知道何時更改模板中的路徑,如何從上一個'd '到新的 – 2014-12-03 18:49:08
您將必須使用一些緩動功能間隔地修改路徑。有框架(如snap或d3)可以爲你做到這一點 - [這裏](http://bl.ocks.org/mbostock/31ec1817b2be2660c453)是一個使用d3的例子。 – user1620220 2014-12-03 19:12:13