我想制作一个时间轴,用户可以选择滚动缩放或选择要缩放的区域。 有第一喜欢的一些例子: https://bl.ocks.org/mbostock/4015254 或者与刷面积放大: https://bl.ocks.org/mbostock/f48fcdb929a620ed97877e4678ab15e6
但我无法找到两者兼具的例子。我怎样才能做到这一点?或者有没有我错过的例子?d3的可拖动和缩放时间轴
回答
这不是最直接的实施。您会注意到,基于笔刷的缩放不依赖于d3.zoom
,而是通过监听器执行缩放,该监听器触发事件以执行缩放轴并相应移动绘图元素所需的任何操作。
相比较而言,所有基于滚动变焦实例一般依赖于d3.zoom
其利用d3.zoom()
行为跟踪,同时摇摄/变焦和是用于更新各种图表元素单独负责在图上执行的所有变换。难点在于2种方法完全不同,如果您通过刷子手动更改图表视图,则需要找出一种方法来更新d3.zoom
引用的内部缩放转换,以便它了解通过刷新所做的更改基于画笔的缩放事件。
这并非易事,因为d3.zoom
并非设计用于从别处获取信息,而且执行的转换的内部记录不意味着可更新/可变。您可以通过selection.call(zoom.transform, d3.zoomIdentity);
更新转换,但不幸的是,它还会触发与实际缩放行为有关的大量事件,这不是您想要的,因为您已经使用基于笔刷的缩放处理了所有缩放行为。一个丑陋的,但有效的解决办法,我是可以使用重置缩放转换是突变绑定到d3.zoom
行为DOM节点的实际.__zoom
领域如下:
// WARNING: Ugly mutation of __zoom property of pan/scroll-zoom rect to
// reset the transform without having to fire events associated with zoom
// d3.select(".zoom").node().__zoom = {k: 1, x: 0, y: 0}; <-- Fails since __zoom contains other hidden objects
scrollZoom.node().__zoom["k"] = 1;
scrollZoom.node().__zoom["x"] = 0;
scrollZoom.node().__zoom["y"] = 0;
因此,例如:如果你需要一个用于矩形缩放的二维刷子,而且基于d3.zoom
的缩放用于平移和鼠标滚动,随后在任何时候使用二维刷子进行缩放时,都需要将d3.zoom转换重置为上述的标识转换。当由于记录变换而造成的平移/鼠标滚动操作链接基于2D画笔的缩放操作时,这可以防止平移/滚动响应中的抖动和粗糙抖动,d3.zoom
与显示的视图不同步(由于2D画笔在没有d3.zoom的知识的情况下改变视图)。
这里是别的,重要的是要注意的:
d3.zoom
有一个限制,它目前只支持一个共同的缩放比例为X和Y轴(Source)。这不幸意味着无法将基于二维刷子的缩放映射到基于d3.zoom
的方法,因为基于2D刷子的缩放会在X和Y中产生不同的缩放比例。如果您想用最少的问题进行操作,请使用一致的方法,我建议您使用d3.xyzoom进行调查。这是d3.zoom
的一个分支,它实现了对X和Y轴的不同比例的支持。这将使您能够计算任何2D画笔选择的相应X和Y缩放比例和平移值,然后您可以将它们输入到d3.zoom
中,从而使您可以使用常用方法执行所有缩放(这也会导致最小量代码重复)。这就是说,如果你只对一维基于笔刷的缩放感兴趣,你应该能够将它映射到d3。缩放方式,以便您不必处理2种不同的路径,以处理图表中所有轴和其他图形元素的视图和缩放。这里是一个很好的例子:
https://bl.ocks.org/mbostock/34f08d5e11952a80609169b7917d4172
我这个职位的长度道歉,如果这是一个有点散漫。我正在努力在几天内将我的工作放在一块,我会尽量绕圈回来,并发布一个链接,当我这样做。我一周前才开始学习D3,所以我一直在学习。
- 1. D3在X轴上缩放
- 2. d3.js缩放/拖动散点图
- 3. d3.js缩放和平移时间轴 - 如何显示动态时间轴范围?
- 4. 视频时间轴拖动和点击
- 5. D3:使用矩形拖动来缩放和平移
- 6. Matplotlib - 固定x轴缩放和自动缩放y轴
- 7. 缩放/重绘d3.js网格线放大/拖动
- 8. d3.js保持可缩放的y轴不低于零
- 9. 将D3标签拖放到可拖动的圆圈
- 10. D3在时间轴上滚动
- 11. 如何在可拖动和可拖放之间画线?
- 12. 用于在时间轴上绘制图形的Javascript库(可缩放和可选)
- 13. 组合拖放和缩放
- 14. Matplotlib根据手动缩放的x轴缩放y轴
- 15. 在Javascript中绘制可缩放的音频波形时间轴
- 16. 如何在iOS中创建可缩放的时间轴?
- 17. 拖拽和缩放有界的力布局d3
- 18. 如何放大/缩小d3.time.scale而不缩放绑定到时间轴的其他形状
- 19. 拖延CreateJS动画时间轴
- 20. 拖拽,缩放和UIView的
- 21. D3帆布刷和缩放
- 22. d3堆叠和缩放
- 23. D3缩放和离子popover
- 24. D3:是否可以缩放+平移一个轴,只平移另一个轴?
- 25. 缩放,旋转和拖动UIImageView
- 26. 拖动,缩放和旋转多个UIImageviews
- 27. d3时间尺度设置初始缩放级别和域名
- 28. d3.js - 添加缩放和平移防止拖
- 29. 可拖动的需要在还原时缩放
- 30. d3.js散点图 - 缩放/拖动边界,缩放按钮,重置缩放,计算中位数
以下我的评论有帮助吗? – HamsterHuey
不,我无法实现它。但是现在我专注于考试,所以我没有时间花费超过1天的时间。 –