setTimeoutをせずに重いワークロードと機能を待っている前に、モーダルオーバーレイをお待ちください()?
-
22-09-2019 - |
質問
これは確か関与なし非同期フェージング/アニメーション機能がないことを確認するために、簡略化した例である。
私はそれは準備ができているときに、背景が黒に重いワークロードの作品やターンをするときの機能赤くされていることを、したいです。実際に何が起こるかは、機能の準備が完了した後、ほとんどの時間背景は、黒に直接向けるだろうということ、です。ヨは、あなたが警告され「行って」を待っている場合でも、赤の背景は表示されません。
その後、赤の背景の変化が起こるように、setTimeoutを持つ数ミリ秒をwatingよりよい解決策は、あります。 )(仕事を呼び出すには、直接問題を生じます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Test</title>
<script type='text/javascript'>
function work()
{
var i, a;
a = [];
for(i = 0; i < 250000; i++)
{
a.push(Math.random());
}
a.sort();
document.getElementsByTagName('body')[0].style.background = '#000000';
alert('done');
return true;
}
window.onload = function() {
document.getElementsByTagName('body')[0].style.background = '#ff0000';
//work();
setTimeout(work, 100);
};
</script>
</head>
<body>
<h1>Test</h1>
</body>
</html>
解決
「モーダルポップアップが」完全に(永遠に)ブラウザをロックし、を、ユーザーが本当にを動揺することからスクリプトを保存することがあります。これは、ガードは、JSコードから検出できないと同期のモデルを次のJSの実行を一時停止します。これは、をブロックしないのライト・コード、あなたを救うためにあります!これは、サンク/閉鎖またはキューを使用して、再開可能とcancleableようにセットアップほとんどの計算にかなり簡単、実際のです。
とにかく...私の経験では、1ミリ秒の「遅延」はCSSを更新するFF3.5(勝利)とIE6-8で十分である(実際の遅延は、最も可能性が高い以上は1ms以下となります)。この強制同期モデル内のイベントのポストバックの「待ち合わせ」の上記の例では、少なくとも、CSSスタイルは、JSの実行前に適用されることを可能にする、続けています。私はprototype.jsのは、それが「遅延」機能だためには0msの値を使用してと思うが、私は勇敢なことはないです。
また、 'document.body': - )
(私はかなり確実で、この全体的なアプローチは、オープンエアの魚市場のようなにおいがない「より良い」方法は、ありませんよ。)