javascript - 具有重置功能的 D3js 缩放

标签 javascript d3.js svg zooming

我在一个项目中使用 D3js,需要缩放功能和重置缩放的能力。我的问题是缩放功能就像从未发生过重置一样。这是我的代码:

function load() {
  var svg = d3.select("body")
    .append("svg")
    .attr("width", "100%")
    .attr("height", "100%");
  var zoom = d3.zoom().on("zoom", function() {
    d3.select("#vis").attr("transform", d3.event.transform);
  });
  var vis = svg.call(zoom).append("g").attr("id", "vis");
  d3.select("body").on("keypress", function() {
    if (d3.event.shiftKey) {                                                                                                        
      if (d3.event.key == "R") {                                                                                                    
        vis.transition().duration(500).attr("transform", d3.zoomIdentity);
      }
    }
  });
  vis.append("rect")
    .attr("x", 10)
    .attr("y", 10)
    .attr("width", 100)
    .attr("height", 100);
}

这是该问题的运行示例:
http://bl.ocks.org/nicmcd/a74b0bfba61f50d932dedd6534ad7d9e

如何获得重置操作以重置缩放功能的内部状态,以便将来的事件以重置状态为基础?

最佳答案

我的代码有两个问题。一、转场需要来自svg不是 vis .其次,无法使用 attr() 手动完成重置转换,必须使用 call() .这是修改后的代码:

  function load() {
    var svg = d3.select("body")
      .append("svg")
      .attr("width", "100%")
      .attr("height", "100%");

    var zoom = d3.zoom().on("zoom", function() {
      vis.attr("transform", d3.event.transform);
    });

    var vis = svg.append("g").attr("id", "vis");
    svg.call(zoom);

    d3.select("body").on("keypress", function() {
      svg.transition().duration(500).attr("transform", d3.zoomIdentity)          
    });

    vis.append("rect")
      .attr("x", 10)
      .attr("y", 10)
      .attr("width", 100)
      .attr("height", 100);
  }

这是一个工作示例:
http://bl.ocks.org/nicmcd/4c730aa64c04bf100a58f224b90c2ff4

感谢 Andrew Reid 指出错误。

关于javascript - 具有重置功能的 D3js 缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50731239/

相关文章:

javascript - facebook 如何在密码更改时执行 onkeyup 和 onchange ?

javascript - 在 CSS 或 JavaScript 中反转图像的颜色

javascript - 如何将 Angular 2 事件绑定(bind)到 svg 对象?

javascript - Firefox 47 上的 pushpad 错误 : navigator. serviceWorker 未定义

javascript - 通过key进行区分,然后得到key以外字段的结果

javascript - 每次使用 D3 V3 或 JavaScript 单击按钮时使 svg 元素的颜色变暗

javascript - d3 图标从节点上飘离

angularjs - nvd3 图表开始在浏览器中被压扁

javascript - 是否可以使用 HTML 的 .querySelector() 通过 SVG 中的 xlink 属性进行选择?

ruby-on-rails - Inline_svg gem 不工作。找不到 SVG 文件