Kurz gesagt, Sie möchten translate()
den Canvas-Kontext anhand Ihres Versatzes scale()
vergrößern oder verkleinern und dann translate()
um das Gegenteil des Mausversatzes zurück. Beachten Sie, dass Sie die Cursorposition vom Bildschirmbereich in den transformierten Canvas-Kontext umwandeln müssen.
ctx.translate(pt.x,pt.y);
ctx.scale(factor,factor);
ctx.translate(-pt.x,-pt.y);
Ich habe auf meiner Website ein voll funktionsfähiges Beispiel erstellt, das Sie untersuchen können, indem Sie das Ziehen unterstützen, zum Vergrößern klicken, bei gedrückter Umschalttaste nach außen klicken oder das Rad nach oben / unten scrollen.
Das einzige (aktuelle) Problem ist, dass Safari im Vergleich zu Chrome oder Firefox zu schnell zoomt .