javascript - D3 v4 - 添加过渡以仅缩放而不是平移/拖动

标签 javascript d3.js

我想在缩放时对所有元素使用过渡,但不在平移时使用过渡。

选项 1:我想在平移时中断过渡,但在缩放时保持过渡。我尝试过多种方法,包括下面的方法,但没有任何效果。

  .call(vis.zoom)
  .on("mousedown.zoom", function() {
    d3.interrupt(this);  <------------------ DOESN'T WORK
  });

选项 2: 我也愿意接受第二个选项,如果我单击缩放按钮,则仅在该点向 SVG 中的所有元素添加过渡。再次,我尝试了下面的方法,但没有成功。

function zoomIn() {
  timeline.zoom.scaleBy(timeline.svg, 1.5);
  timeline.svg.transition().duration(1000); <----- DOESN'T WORK
  timeline.wrangleData();
}

完整示例: https://jsfiddle.net/kre96sdy/2/

最佳答案

借助最近添加的重置按钮(Mike Bostock 添加到此要点中),我能够自己解决这个问题(使用选项 2):

https://bl.ocks.org/mbostock/db6b4335bf1662b413e7968910104f0f

function resetted() {
  svg.transition()
    .duration(750)
    .call(zoom.transform, d3.zoomIdentity);
}

您可以看到他只是为重置按钮添加了一个过渡,因此使用鼠标进行缩放/平移不受影响。

因此,就我而言,我执行了以下操作,效果很好:

function zoomIn() {
  timeline.svg.transition()
    .duration(750)
    .call(timeline.zoom.scaleBy, 1.5)
}

关于javascript - D3 v4 - 添加过渡以仅缩放而不是平移/拖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38809539/

相关文章:

javascript - 如何获取函数的字符串名称以便在 JavaScript 中调用它?

javascript - Servlet 过滤器不允许在 jsp 文件中上传指向 js 库的链接

javascript - 使用 D3.js 和 Express.js 的 Web 服务,以及同时进行的多个请求

javascript - D3 DateTime 解析器考虑时区

javascript - D3.js 饼图 II - 来自范围类型输入的动态值

javascript - 无法将形状附加到 svg

javascript - 跟踪各种ajax post请求的进度

javascript - AngularJS 表单提交不适用于 JQuery 验证

javascript - 为什么用户加入房间时视频不显示?

javascript - D3 径向树状图缩放抖动