这就是我认为正在发生的事情:根据SVG 规范,变换
rotate(40 150,130)
相当于:
translate(150,130) rotate(40) translate(-150, -130)
看起来 D3 正在为平移和旋转设置动画 - 的内部d3.transform
表示rotate(40 150,130)
是旋转组件 + 平移组件,因此两者都包含在过渡中。
这里最简单的解决方法是在原点画你的针,用外部g
元素将它翻译到正确的位置,然后旋转它:
var needle = svg
.append("g")
.attr("class", "needle")
.attr("transform", "translate(150 , 130)")
.append("path")
.attr("class", "tri")
// your path may have been prettier
.attr("d", "M-3 0 L0 -130 L3 0 S3 5 0 5 S-3 5 -3 0 Z")
.attr("transform", "rotate(-60)");
然后
needle
.transition()
.duration(2000)
.attr("transform", "rotate(40)");
见工作小提琴:http: //jsfiddle.net/nrabinowitz/74mCb/1/