【发布时间】:2018-10-26 06:54:07
【问题描述】:
我已经像这样导入了zoom
import {zoom} from 'd3-zoom';
我的svg 和群组container 看起来像这样
const svg = select(root)
.append('svg')
.attr('width', width)
.attr('height', height);
const container = svg.append('g');
const zoomScale = 2;
我尝试设置初始缩放级别(通过zoom().scaleTo() 函数这样的
zoom().scaleTo(container, zoomScale)
或者像这样
container.call(zoom().scaleTo, zoomScale)
但是没有任何东西被反射回来。 有趣的是,缩放功能有效,看起来像这样
svg.call(
zoom().on('zoom', () => {
const transformation = getEvent().transform;
const {x, y, k} = transformation;
container.attr('transform', `translate(${x}, ${y})scale(${k})`);
})
);
通过在我的容器中添加变换来添加初始缩放也可以,但是在下一次缩放触发时,缩放从值 1 开始,并且在整个图表中可以看到一种闪烁的东西。我希望避免这种情况。
这里有什么问题?请帮忙。
【问题讨论】:
-
首先使用您在问题中描述的事件处理程序设置一个变量,例如
var zoom = zoom().on('zoom', () => { const transformation etc...,然后使用它:zoom.scaleTo(container, zoomScale)。另外,对 SVG 做同样的事情:svg.call(zoom);,就是这样。 -
天啊!!!这很有效,非常感谢你,请回答这个帖子,我会将其标记为正确。您是否还介意解释一下这是如何工作的,而我的版本却没有。谢谢!
标签: javascript d3.js zooming