アニメーション用のキャンバス Web ページを作成しています。奇妙なことは、html ファイルをダブルクリックして Web ページを起動するたびに、ほとんどの場合、キャンバスのサイズが正しくないことです。以前に同様の質問を投稿しました:ロード時にキャンバスのサイズが正しくありませんが、希望する回答がありません。
大規模なデバッグの後、私にそのような問題を引き起こしているのはそれであることがわかりましたwindow.innerWidth
。はwindow.innerWidth
、html ファイルをダブルクリックしてページが起動されるたびに 0 を返し、キャンバス サイズが正しくありません (興味深いことに、キャンバス サイズは正確に 0 ではありませんが、レンダリングされるオブジェクトが互いに重なり合う非常に小さいサイズです)。 、しかし、ページをリロードした後 (Ctrl+R)、問題は発生しなくなりました。私はjQueryを使用してページをロードしています。これが私のコードです:
html:
<body>
<canvas id="main_canvas"></canvas>
</body>
js:
$(document).ready(function() {
var SCREEN_WIDTH = window.innerWidth-10,
SCREEN_HEIGHT = window.innerHeight-10;
if (window.innerWidth === 0) { alert("wtf? width = 0?");}
var canvas = $('canvas')[0],
context;
init(); // use $(window).load(init) does not fix the problem
function init() {
if (canvas.getContext) {
context = canvas.getContext('2d');
animate(); // draw stuff
}
else {
alert('Your browser does not support html5 canvas');
}
}
});
ここでわかるように、私はすでに$(docuemnt).ready(function())
ロードされていることを確認するために使用していますが、リンクhttp://4loc.wordpress.com/2009/04/28/documentready-vs-windowload/から、著者はドキュメントがすべてのグラフィックスがまだロードされていなくても、HTML ドキュメントがロードされ、DOM の準備が整った時点で ready イベントが実行されます。
一方、$(window).load(function())
すべてのフレーム、オブジェクト、および画像を含む完全なページが完全に読み込まれると、少し遅れて が実行されます。したがって、画像やその他のページ コンテンツに関係する関数は、ウィンドウの load イベントまたは content タグ自体に配置する必要があります。しかし、これを使用しても問題は解決しません。
ロードする前に js ファイルがウィンドウの幅を要求しているのかもしれませんが、実行可能な解決策が見つかりません。誰でもこれを手伝ってもらえますか?