假设您使用的是 d3 v4
这是在this relevant example中初始化缩放行为的方式
var zoom = d3.zoom()
.on("zoom", zoomed)
canvas
.call(zoom.transform, transform)
为了稍微揭开神秘面纱,最后一行也可以这样写:
zoom.transform(canvas, transform)
transform 是一个函数,由您提供。由于调用了这个函数并使用了它的返回值,你也可以这样重写它:
zoom.transform(canvas, d3.zoomIdentity.translate(...) /* and .scale(...) etc */)
这是应用转换的最低级别的方法。
为方便起见,您可以更简单地使用zoom.translateBy,而不是zoom.transform,(内部调用zoom.transform,如上)
var zoom = d3.zoom()
.scaleExtent([1, Infinity])
.translateExtent([[0, 0], [width, height]])
.on('zoom', handleZoom)
zoomable.call(zoom.translateBy, initialX, initialY)
或者,可以重写最后一行:
zoom.translateBy(zoomable, initialX, initialY)
在这两种情况下,都涉及zoomable,因为zoom 不保持自己的平移和缩放状态。该状态存储在正在转换的元素上,即zoomable。