【发布时间】:2014-09-28 22:40:20
【问题描述】:
这是一些示例代码和其中的一个小技巧:
var w = 400;
var h = 400;
var r = 20;
var factor = 5;
var svg = d3.select("body").append("svg")
.attr("width", w)
.attr("height", h)
.append("g")
.attr("transform", "translate(" + w/2 + "," + h/2 + ")");
svg.append("circle")
.attr("cx", 0)
.attr("cy", 0)
.attr("r", r)
.style("fill", "black");
svg.append("circle")
.attr("cx", 150)
.attr("cy", 150)
.attr("r", r)
.style("fill", "red");
svg.selectAll("circle")
.transition()
.duration(2000)
.attr("transform", "scale(" + 1/factor +")")
.attr("r", r*factor);
http://jsfiddle.net/o1wzfas7/2/
在示例中,我将两个圆缩小了 5 倍(这也缩放了它们的位置,从而使它们彼此“更接近”),同时将圆的半径放大了 5 倍。想法是它们看起来会在不改变大小的情况下彼此靠近(好像我正在改变它们的“cx”和“cy”属性),但由于某种原因,比例转换和半径转换似乎以不同的速率进行,因此您会看到圆圈变大,然后恢复到初始大小。
有谁知道我将如何使用比例和半径过渡来做到这一点,但是让两者相互抵消,这样圆圈的大小就不会发生变化?
【问题讨论】:
-
你有什么理由不能做像this这样的事情吗?
-
如果你想让它们靠近而不改变大小,为什么不直接这样做呢?
-
合理的问题,@royhowie。我有一个散点图,我希望能够在限制范围内进行缩放和平移。目前在 d3 API 中似乎并没有很好地处理这个问题(缩放限制是 - 平移限制不是)。在尝试实施平移限制之前,我 只是简单地更改了 cx 和 cy,生活还不错。现在我正在做类似于 Mike Bostock 在这里所做的事情:bl.ocks.org/mbostock/4987520 总而言之,我现在要处理缩放而不是 cx 和 cy 变化。
-
@AmeliaBR royhowie 提出了类似的问题——请参阅我的回复。
-
感谢@ErikMadsen 的解释。在其中一种情况下,演示问题的简化工作示例(当然非常感谢)最终使基本目标变得微不足道。
标签: javascript svg d3.js transition