スクロール ホイールを使用して画像をズームインおよびズームアウトする HTML5 < canvas > プロジェクトをプログラミングしています。Googleマップのようにカーソルに向かってズームしたいのですが、動きを計算する方法が完全にわかりません。
私が持っているもの: 画像 x と y (左上隅); 画像の幅と高さ; キャンバスの中心に対するカーソル x と y。
スクロール ホイールを使用して画像をズームインおよびズームアウトする HTML5 < canvas > プロジェクトをプログラミングしています。Googleマップのようにカーソルに向かってズームしたいのですが、動きを計算する方法が完全にわかりません。
私が持っているもの: 画像 x と y (左上隅); 画像の幅と高さ; キャンバスの中心に対するカーソル x と y。
要するに、translate()
キャンバスのコンテキストをオフセットでscale()
拡大または縮小してからtranslate()
、マウスのオフセットの反対で元に戻す必要があります。カーソル位置を画面スペースから変換されたキャンバス コンテキストに変換する必要があることに注意してください。
ctx.translate(pt.x,pt.y);
ctx.scale(factor,factor);
ctx.translate(-pt.x,-pt.y);
ドラッグ、クリックしてズームイン、Shift キーを押しながらクリックしてズームアウト、またはホイールを上下にスクロールして確認できるように、私の Web サイトに完全に機能する例を掲載しました。
唯一の (現在の) 問題は、Chrome や Firefox に比べてSafari のズームが速すぎることです。
これらの JS ライブラリが役立つことを願っています: (HTML5, JS)
http://www.netzgesta.de/loupe/
https://github.com/akademy/CanvasZoom
https://github.com/zynga/scroller
私は、ルーペを使っています。それは素晴らしいです!あなたにとって最良のケースはスクローラーです。
@Phrogz の回答をベースとして、キャンバスのドラッグ、ズーム、回転を可能にする小さなライブラリを作成しました。これが例です。
var canvas = document.getElementById('canvas')
//assuming that @param draw is a function where you do your main drawing.
var control = new CanvasManipulation(canvas, draw)
control.init()
control.layout()
//now you can drag, zoom and rotate in canvas
プロジェクトのページで、より詳細な例とドキュメントを見つけることができます