【发布时间】:2017-05-10 22:08:36
【问题描述】:
我不知道如何正确地将 d3.zoom 行为应用于 HTML 元素(不是 SVG)。在documentation 中,关于如何执行此操作的唯一建议是:
同样,通过 CSS 将转换应用于 HTML 元素:
div.style("transform", "translate(" + transform.x + "px," + transform.y + "px) scale(" + transform.k + ")");
所以我所做的是:("Working" example)
var zoom = d3.zoom()
.scaleExtent([0.1, 1])
.on('zoom', zoomed);
var root = d3.select('.root').call(zoom);
function zoomed() {
var transform = d3.event.transform;
root.style("transform", "translate(" + transform.x + "px," + transform.y + "px) scale(" + transform.k + ")");
}
这里的问题是,如果你缩小,缩放最终会停止,因为鼠标不再在可缩放区域内。
所以我所做的是使用一个父元素来附加缩放行为和一个被转换的子元素。 Here's an example 的那个。现在的问题是转换搞砸了。我无法完全理解到底是什么搞砸了以及为什么,但是如果我用鼠标滚轮缩放,转换后的画布肯定没有做它应该做的事情(放大时远离鼠标而不是靠近鼠标等)。
不幸的是,我找不到任何关于如何将d3.zoom 与 HTML 结合使用的示例。有一个更好的方法吗?或者我可以在使用子元素时以某种方式修复转换吗?
【问题讨论】:
标签: javascript html d3.js