How to reset Zoom in d3.js?

前端 未结 1 1960
难免孤独
难免孤独 2020-12-21 06:05

I have a simple svg rectangle and I have added zooming and panning on it using d3.js. I have also added a button in order to try and reset the zoom once the button is clicke

相关标签:
1条回答
  • 2020-12-21 06:25

    You need to rewrite your code this way:

    function zoomed() {
      gElem.attr("transform", d3.event.transform)
    }
    
    var zoom = d3.zoom().on("zoom", zoomed);
    
    var svg = d3.select("body")
      .append("svg")
      .attr("width", "600")
      .attr("height", "600")
    
    
    var gElem = svg.append("g").call(zoom);
    
    gElem.append("rect")
      .attr("x", 50)
      .attr("y", 50)
      .attr("width", 300)
      .attr("height", 200)
      .style("fill", "#B8DEE6")
    
    $("#Reset").click(() => {
      gElem.transition()
        .duration(750)
        .call(zoom.transform, d3.zoomIdentity);
    });
    

    Check demo:

    function zoomed() {
      gElem.attr("transform", d3.event.transform)
    }
    
    var zoom = d3.zoom().on("zoom", zoomed);
    
    var svg = d3.select("body")
      .append("svg")
      .attr("width", "400")
      .attr("height", "200")
      
    
    var gElem = svg.append("g").call(zoom);
    
    gElem.append("rect")
      .attr("x", 50)
      .attr("y", 50)
      .attr("width", 300)
      .attr("height", 200)
      .style("fill", "#B8DEE6")
    
    $("#Reset").click(() => {
      gElem.transition()
        .duration(750)
        .call(zoom.transform, d3.zoomIdentity);
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <button id="Reset">RESET</button>

    0 讨论(0)
提交回复
热议问题