すべてのキャンバスのレンダリングは、まずすべての座標に変換行列を掛けて行います。この行列は、レンダリングするすべてのピクセルに対して、スケーリング、平行移動、回転、スキュー、シアーなどをすべて1回の操作で行います。
あなたがしなければならないことは、キャンバスに共通の描画領域に合わせてトランスフォームを設定することだけです。アスペクトはディスプレイごとに異なるため、ホワイトボードに合わせてスケーリングする必要があります。したがって
あなたのホワイトボードが
var whiteBoard = {
width : 1000,
height : 500,
}
であり、あなたが
var scale = Math.min(canvas.width/whiteBoard.width, canvas.height/whiteboard.height);
に合わせてホワイトボードは、分スケールを取得合うようにキャンバスサイズ
canvas.width = window.innerWidth; // or whatever page size you want
canvas.height = window.innerHeight;
を持っているならば、取得左上角
var top = canvas.height/2 - (whiteBoard.height * scale)/2;
var left = canvas.width/2 - (whiteBoard.width * scale)/2;
次に、あなたが今、あなたはすべてのディスプレイに同じ座標でキャンバスに描くことができます変換
ctx.setTransform(scale,0,0,scale,left,top);
を設定します。
ctx.fillRect(0,0,whiteBoard.width,whiteBoard.height);
が失われます画面サイズや縦横と何も問題はありませ表示され、それがクリッピングなし表示可能な限り大きくなります。
この場合、ユーザーは画面サイズに関する情報を相互に交換する必要があります。 – Saitama
@ user42624誰もが使用する標準のホワイトボードサイズを定義する必要はありません。誰かがキャンバスを描くとき。マウスの座標からtop.leftを減算し、スケールで除算します。これは、マウスの座標を標準的なホワイトボードのスケールと位置に変換します。誰も他人の画面サイズを知る必要はありません。 – Blindman67