【问题标题】:D3 zoom on jquery button clickD3放大jquery按钮单击
【发布时间】:2016-02-12 09:12:21
【问题描述】:

我正在尝试实现一个简单的 d3 svg 缩放功能。双击矩形时,缩放功能工作正常。

现在我正在尝试在 jquery 按钮单击功能上实现相同的功能。但我在控制台中遇到以下错误。

Uncaught TypeError: Cannot read property 'translate' of null 以下是我的代码。

var zoom = d3.behavior.zoom()
  .scaleExtent([1, 10])
  .on("zoom", zoomed);

var vis = d3.select("#svg-canvas").append("svg")
  .attr("width", "550")
  .attr("height", "200")
  .append("g")
  .attr("class", "svg-container")
  .attr("transform", "translate(10,10)")
  .call(zoom);

vis.append("rect")
  .attr("x", 10)
  .attr("y", 10)
  .attr("width", 100)
  .attr("height", 40)
  .style("fill", "#444");

function zoomed() {
  d3.select(".svg-container").attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
}

$(document).ready(function() {
  $("#zoom").click(function() {
    zoomed();
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="svg-canvas">

</div>

<button id="zoom">
  Zoom
</button>

该功能不工作。我做错了什么还是可以实现这样的功能?

【问题讨论】:

  • 浏览器控制台有错误吗?
  • 是的,已编辑问题。

标签: javascript jquery d3.js


【解决方案1】:

点击时您没有设置 d3.event,因为没有来自 d3 的事件,因此您必须自己指定缩放/平移参数

function zoomClicked(translate, scale) {
    d3.select(".svg-container").attr("transform", "translate(" + translate + ")scale(" + scale + ")");
}

 $(document).ready(function() {
     $("#zoom").click(function() {
         zoomClicked(4, 4);
     });
 });

【讨论】:

    【解决方案2】:

    D3 有自己的双击事件生成机制。由于您在 D3 未处理的元素上具有点击处理程序,因此您没有 d3.event

      d3.select(".svg-container")
        .attr("transform", scale(2)");
    

    【讨论】:

      猜你喜欢
      • 2022-12-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多