少し前に同様の問題がありましたが、キャンバスを使用しているという違いがありますが、svg を使用して変換行列を保存しているため、コードの必要な部分を投稿すると役立つ場合があります。
window.transform = svg.createSVGMatrix();
window.pt = svg.createSVGPoint();
transformedPoint = function (x, y) {
window.pt.x = x; window.pt.y = y;
return pt.matrixTransform(window.transform.inverse());
}
translate = function(dx, dy) {
window.transform = window.transform.translate(dx, dy);
}
scale = function (scaleX, scaleY) {
window.transform = window.transform.scaleNonUniform(scaleX, scaleY);
};
zoom = function (scaleX, scaleY, x, y) { //use real x and y i.e. mouseposition on element
var p = transformedPoint(x, y);
translate(x, y);
scale(scaleX, scaleY);
translate(-x, -y);
}
このコードの一部を使用して、それが機能することを願っています
Phrogz のクレジットと彼の優れた例はこちら: https://stackoverflow.com/a/5527449/1293849