【发布时间】:2015-09-05 07:19:47
【问题描述】:
我打算使用 d3.js 围绕其中心旋转一个矩形。 我的代码是
var svg = d3.select("body")
.append("svg").attr("width", 200).attr("height", 200).append("rect")
.attr("x", 50)
.attr("y", 50)
.attr("fill", "black")
.attr("width", 100)
.attr("height", 100)
.transition()
.ease("linear")
.duration(1000)
.attr("transform", "rotate(180,100,100)");
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
它旋转并回到矩形的原始 x,y 坐标,但是 旋转过程中不绕其中心旋转。
我在网上找到的正确代码是
var svg = d3.select("body").append("svg").attr("width", 200).attr("height", 200);
var rect = svg.append("rect")
.attr("x", 50)
.attr("y", 50)
.attr("width", 100)
.attr("height", 100);
rect.transition().duration(5000)
.attrTween("transform", rotTween);
function rotTween() {
var i = d3.interpolate(0, 360);
return function(t) {
return "rotate(" + i(t) + ",100,100)";
};
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
这个矩形正确地围绕它的中心旋转。但我看不出两个代码之间有什么区别。有什么区别?
【问题讨论】:
-
在您的示例中,补间将对旋转和平移的所有参数起作用。这就是你得到摆动效果的原因。矩形既是平移又是旋转。在示例中,您输入了 return "rotate(" + i(t) + ",100,100)"; 您可以看到补间中只有旋转角度受到影响。
标签: d3.js