我正在用d3.js做一些关于缩放的测试。
目前,我已经在测试中成功地实现了几何缩放,但它有一个缺点,比如缩放后的g
下的元素正在缩放。
我明白了,这可以通过使用semantic zooming来解决。
问题是我在测试中需要scale
,因为我正在将它与jQuery.UI滑块value
同步。
另一方面,我想调整text
元素的大小,以便在缩放操作后保持其大小。
我有一个我目前尝试here的例子。
我在修改代码以适应这个目的时遇到了麻烦。有人能分享一些见解/想法吗?
我正在用d3.js做一些关于缩放的测试。
目前,我已经在测试中成功地实现了几何缩放,但它有一个缺点,比如缩放后的g
下的元素正在缩放。
我明白了,这可以通过使用semantic zooming来解决。
问题是我在测试中需要scale
,因为我正在将它与jQuery.UI滑块value
同步。
另一方面,我想调整text
元素的大小,以便在缩放操作后保持其大小。
我有一个我目前尝试here的例子。
我在修改代码以适应这个目的时遇到了麻烦。有人能分享一些见解/想法吗?
2条答案
按热度按时间jckbn6z71#
对于您的解决方案,我合并了两个示例:
代码片段:
我正在放大w.r.t. 250,250,这是剪辑圆的中心。
工作代码here(已添加必要的注解)
希望这有帮助!
8cdiaqws2#
要做到这一点,首先需要对代码进行一点重构,使用d3时,最好使用
data()
将项目附加到选择中,而不是使用for循环。所以这个:
变成了这样
这样,您就可以使用例如
.attr("x",function(d,i){ //d.x is equal to arr.x, i is item index in the selection});
访问各个坐标然后,为了实现你的目标,而不是改变你的项目的规模,你应该使用一个线性尺度来改变每个星星的位置。
首先,将线性比例添加到小提琴并将其应用于缩放:
最后,在缩放事件中,将比例应用于每个星星的
x
和y
此时,缩放将在没有滑块的情况下工作。要添加滑块,只需在onSlide事件期间手动更改缩放行为比例值,然后调用onZoom。
注意:我使用了这个配置的滑块:
请注意,此时ui的缩放是相对于(0,0)执行的,而不是你的“圆”窗口中心。为了解决这个问题,我从编程示例中简化了以下函数,该函数计算有效的平移和缩放以提供缩放行为。
然后只需更改
onSlide
以在每次滑块移动时使用此新函数完整片段