Ich versuche, meine SVG in d3.js (Version 4) zoombar zu machen.Zoom-Ereignis auf bestehendes SVG anwenden (d3.js v4)
Sie meinen Versuch sehen hier: JSFiddle
HTML
<svg id="mySVG" width="800px" height="600px" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); background: lightgrey;">
<g>
<path d="M 0 0 L 100 0 L 100 20 L 0 20 Z" fill="red"></path>
<path d="M 500 500 L 600 500 L 600 520 L 500 520" fill="green"></path>
</g>
</svg>
JS
$(function() {
var svg = d3.select("#mySVG")
.call(d3.zoom().on("zoom", function() {
svg.attr("transform", "translate(" + d3.event.transform.x + " " + d3.event.transform.y + ") scale(" + d3.event.transform.k + ")");
}));
// For test purposes
//$('#mySVG').css('transform', 'scale(2)');
});
In der Tat scheint alles da zu arbeiten, wenn ich in dem Google-Check Code-Inspektor, mit Schwerpunkt auf meinem SVG-Element, sehe ich den Wert von trans spät und Maßstab ändern, wie ich Mausrad vorwärts/rückwärts. Aber dem eigentlichen Element passiert nichts, was sehr merkwürdig ist, da ich auch versucht habe, diesen Skalierungs-/Translationswert durch einfache jQuery zu ändern, und das SVG antwortet mit einer korrekten Skalierung.
Kann mir jemand für diese Aufgabe in die richtige Richtung zeigen?
Zur Erinnerung, hier ist die offizielle Dokumentation für die d3.zoom()
Funktion.
Wrapping in g und die Transformation Anwendung funktioniert jetzt: [** JSFiddle aktualisiert **] (https://jsfiddle.net/ghpo6ayo/6/). Bleibt ein Fehler, wenn ich auf meinem Pfad zoome der Zoom verhält sich richtig, aber nicht, wenn ich Mausrad auf den Bereich des '' Tags, das den Pfad nicht enthält (aber es ist nicht der Zweck dieser Frage). –
Edit: Ich musste 'g.call (d3.drag(). On ('ziehen', function() {/ * ... * /})));' vor der Skala, um dies zu beheben. –