2016-07-19 16 views
13

4. sürümde çalışmak için aşağıdaki kodun güncellenmesi konusunda yardımcı olunur. Zoom.behaviour'u d3.zoom olarak değiştirdim ancak gerekli olan diğer değişiklikler konusunda net değilim. V3'ten daha karmaşık görünüyor!d3 yakınlaştırma ve sürüm 4'e yükseltme 4

.call(d3.zoom().on("zoom", function() { 
    svg.attr("transform", "translate(" + d3.event.translate 
    + ")" + " scale(" + d3.event.scale + ")") 
})) 

Buna: Bu

<!DOCTYPE html> 
<html> 
    <head> 
    <!-- <script type="text/javascript" src="http://d3js.org/d3.v3.js"></script>--> 

    <script data-require="[email protected]" data-semver="4.0.0" src="https://d3js.org/d3.v4.min.js"></script> 

    <style type="text/css"> 
     body, html { 
     width: 100%; 
     height: 100%; 
     margin: 0; 
     } 
     svg { 
     position: absolute; 
     top: 0; 
     left: 0; 
     } 
     p { 
     text-align: center; 
     } 
    </style> 
    </head> 
    <body> 
    <p>Use the mouse to pan (click and move)/zoom (scrollwheel)</p> 
    </body> 
    <script type="text/javascript"> 
     var svg = d3.select("body") 
     .append("svg") 
     .attr("width", "100%") 
     .attr("height", "100%") 
     .call(d3.zoom().on("zoom", function() { 
      svg.attr("transform", "translate(" + d3.event.translate + ")" + " scale(" + d3.event.scale + ")") 
     })) 
     .append("g") 

     svg.append("circle") 
     .attr("cx", document.body.clientWidth/2) 
     .attr("cy", document.body.clientHeight/2) 
     .attr("r", 50) 
     .style("fill", "#B8DEE6") 
    </script> 
</html> 

cevap

28

Değişim İşte

.call(d3.zoom().on("zoom", function() { 
     svg.attr("transform", d3.event.transform) 
})) 

keman olduğunu: https://jsfiddle.net/gerardofurtado/c8bga82b/

+1

var çok teşekkürler. Sadece x eksenini yakınlaştırmanın mümkün olup olmadığını biliyor musunuz? Daha önce kullandığım zoom = d3.zoom.transform() .x (xRange) //.y(y) – user3359706

+0

Bu kemanda çalışıyor, ancak SVG'mde viewbox kullanıyorum ve bunu kırıyor gibi görünüyor mu? – SumNeuron

7

Ben cevap yorumunuza cevap olamaz ama burada sadece x eksenini yakınlaştırmak için:

svg.attr(
    "transform", 
    'translate('+d3.event.transform.x+',0) scale('+d3.event.transform.k+',1)' 
)})) 

jsFiddle Güncelleme: https://jsfiddle.net/axge6a04/1/

+0

en iyisisin! –

2

kabul cevap harika! sınırları içinde istiyoruz olanlarınız kısıtlamak tava & zum (gibi here) için

.. bu

Değişimi:

// width, height = viewport width, height 
.call(d3.zoom().on("zoom", function() { 
    var tx = Math.min(0, Math.max(d3.event.translate[0], width - width * d3.event.scale)); 
    var ty = Math.min(0, Math.max(d3.event.translate[1], height - height * d3.event.scale)); 
    svg.attr("transform", "translate(" + [tx, ty] + ") scale(" + d3.event.scale + ")"); 
}); 

Bu Kime:

.call(d3.zoom().on("zoom", function() { 
    d3.event.transform.x = Math.min(0, Math.max(d3.event.transform.x, width - width * d3.event.transform.k)); 
    d3.event.transform.y = Math.min(0, Math.max(d3.event.transform.y, height - height * d3.event.transform.k)); 
    svg.attr("transform", d3.event.transform); 
})); 
+0

Harika, tam olarak ihtiyacım olan şey! Birçok örnek, zoom nesnesinin kendisini güncellemek için zoom.transform ([tx, ty]) 'dır, ancak bu işlev ortadan kalkar. –

İlgili konular