2013-02-28 16 views

Antwort

5
rect.call(zm=d3.behavior.zoom().x(x).scaleExtent([1,10]).on("zoom", draw)); 

Nach einem sehen i neuen Test haben die Antwort:

var currentZoom = d3.event.scale; 

Aber nur verfügbar/lesbar im draw() Funktion aufgerufen durch .on ("Zoom", Unentschieden)

rect.call(zm = d3.behavior.zoom().x(x).scaleExtent([1,10]).on("zoom", draw)); 

function draw() { 
    // trace l'axe X 
    svg.select("g.x.axis").call(xAxis); 
    // trace l'axe Y 
    svg.select("g.y.axis").call(yAxis); 
    // trace la courbe 
    svg.select("path.line").attr("d", line); 

    console.log(zm.scale(), zm.translate()); // , zm.translate[1] = Y 
    console.log(d3.event.scale, d3.event.translate[0]); // , d3.event.translate[1] = Y 
} 
15

In der Auslosung Funktion das aktuelle Ereignis wird die Zoomstufe haben (d3.event.scale wie Sie bereits erwähnt). Auch wenn Sie das Verhalten der Umgebung wie halten:

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

Dann können Sie die aktuelle Zoomstufe finden durch den Aufruf:

zm.scale(); 
+0

ok, es ist funktioniert ** console.log (zm.scale(), zm.translate()); **, sondern ausschließlich in der Zeichnung function() – Alban

+0

Es sollte Ihnen überall zur Verfügung gestellt arbeiten Zugriff auf die Variable zm im Bereich oder in der Closure haben. Siehe [hier] (http://jsfiddle.net/superboggly/Dn9Dn/) – Superboggly

6

Ab D3 v4 gibt es zwei dokumentierte Möglichkeiten, den Zoom-Status abrufen. Um Zitat d3/d3-Zoom README (unter Zoom Wandelt):

Um den Zoom-Status abzurufen, verwenden event.transform auf einem aktuellen Zoom Ereignis innerhalb eines Zoom-Ereignis-Listener (siehe zoom.on) oder Verwendung d3.zoomTransform für einen bestimmten Knoten.

https://github.com/d3/d3-zoom/blob/master/README.md#zoom-transforms