2 つの問題:
1) CSS ルールを使用してキャンバスの幅を設定しています。これではうまくいきません。キャンバスのサイズを設定しない場合、CSS で設定した内容に関係なく、デフォルトで 300 x 150 ピクセルになります。これは、その中のすべてがスケーリングされることを意味します (あたかもキャンバスが基本的に何であるかである固定サイズの画像であるかのように)。サイズを設定しても CSS を使用する場合、そのサイズはスケーリングされます。
パフォーマンスと品質が低下し、マウスの位置も再計算する必要があります。
Javascript からサイズを更新する必要があります。
#canvas, #canvasCursor {
cursor: none;
background: #fff;
position: absolute;
left: 50px;
top: 30px;
width: 62%; /* REMOVE */
height: 80%; /* REMOVE */
z-index: 1;
}
2) どこからでもキャンバス サイズを更新していません。幅と高さのプロパティを設定することでキャンバスを更新できます - 使用できるウィンドウのサイズに設定します:
window.onresize = function() {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
//call redraw
}
または、パーセンテージに設定する場合は、キャンバスが % 値を取らないため、これを自分で計算する必要があります。
window.onresize = function() {
canvas.width = window.innerWidth * 0.62; //ie. 62% of width
canvas.height = window.innerHeight * 0.8; //ie. 80% of height
//call redraw
}
この要素は特殊なケースであるため、Canvas はピクセル サイズのみを使用します。
なぜ内側の幅/高さ? これは、表示されるウィンドウの実際のビューポートを表します (モバイル デバイスを使用すると、より明確に表示されます)。
固定サイズが必要な場合は、直接設定できます。
canvas.width = 800;
canvas.height = 600;
なぜ更新 (すべてを再描画) する必要があるのですか? Canvas は、描画されたもののスナップショットのみを保持します。そのコピーは保持しません。画面に映っているのはそれです。
サイズを変更すると、再初期化されるため、再度更新する必要があります。再描画するものがたくさんない限り、これはパフォーマンス コストがほとんどかかりません。これは、ユーザーがブラウザ ウィンドウのサイズを変更した場合にのみ発生します。