d3.js v4程序化Pan + Zoom。怎么样?

zel*_*niy 4 d3.js d3.js-v4

我做了一个我要实现的小例子,这里是-https://jsfiddle.net/zeleniy/4sgqgcx0/。您可以照常缩放和平移SVG图像。但是我不知道当用户单击“ +”和“-”按钮时如何以编程方式实现缩放。特别是当他已经放大/缩小和平移原始图像时。你可以帮帮我吗?

在代码的第13行,您将找到zoom事件处理程序。

var zoom = d3.zoom()
    .on('zoom', function() {
        canvas.attr('transform', d3.event.transform);
    });
Run Code Online (Sandbox Code Playgroud)

在第35和39行-缩放事件处理程序

d3.select('#zoom-in').on('click', function() {
    // what here?
});

d3.select('#zoom-out').on('click', function() {
    // what here?
});
Run Code Online (Sandbox Code Playgroud)

因此,当用户单击“ +”时,应用程序应该放大,就像鼠标位于SVG元素的中心一样。与“-”相同。

zel*_*niy 6

由于费尔。下面是一个更新的jsfiddle的版本。

d3.select('#zoom-in').on('click', function() {
  // Smooth zooming
  zoom.scaleBy(svg.transition().duration(750), 1.3);
});

d3.select('#zoom-out').on('click', function() {
  // Ordinal zooming
  zoom.scaleBy(svg, 1 / 1.3);
});
Run Code Online (Sandbox Code Playgroud)

  • 有人注意到scaleBy方法似乎正在影响转换的x和y吗?我不希望这样吗? (2认同)