<canvas>
私は自分の音楽教育 Web アプリですべての音符とグリフを描画
するために使用します: http://www.musictheory.net/exercises/keysig/bc98yy
Firefox 15.0.1 のユーザーは、演習が次の問題に進むことがあると報告していますが、キャンバスにはまだ前の問題が表示されています。私はこれがテストで 1 回発生するのを見てきました (~500 問中)。
それが発生すると、キャンバスは両方を介してクリアされ、コンテキストでcanvas.width = canvas.width
の呼び出しと、、、など.clearRect
を介して JavaScript でグリフが描画されます。ただし、キャンバスのバッキング バッファーがウィンドウにフラッシュ/描画されることはないようです。.beginPath
.quadraticCurveTo
.closePath
同様の問題に関するバグレポートを過去に見たことがあります。
- https://bugzilla.mozilla.org/show_bug.cgi?id=787623
- https://bugzilla.mozilla.org/show_bug.cgi?id=794337
- http://code.google.com/p/chromium/issues/detail?id=55339
キャンバスの子としてテキスト ノードを挿入し、次の実行ループ サイクルでそれを削除するか、キャンバスの背景色またはパディングを変更するなどの DOM ハックを行うことで、再描画を強制できます。しかし、これは手間がかかるように思えます。私は、明らかな何かが欠けているというしつこい感じを持ち続けています。
私の描画コードは非常に単純です。
canvas.width = width;
ctx.clearRect(0, 0, width, height);
ctx.save();
// Lots of drawing code here
ctx.restore()
ctx.clearRect(0, 0, 1, 1); // Helped force a repaint on some older WebKit browsers?
.save
と.restore
コール の数がバランスが取れていることを確認しました。
1)onclick
イベント ハンドラーに応答して、このコードを直接呼び出しています。代わりに、将来の実行ループサイクルで描画を使用requestAnimationFrame
または実行する必要がありますか?setTimeout
2) canvas.pleaseRepaintNow()
API のような明らかなものが欠けているわけではありませんよね?
3) 他の人が同様の問題に遭遇し、強制的に再描画するために DOM の変更に頼ったことがありますか?