これは、非同期のフェード/アニメーション機能が含まれていないことを確認するための単純化された例です。
負荷の高い機能が動作しているときは背景が赤く、準備ができているときは背景が黒くなるようにしたいです。実際に何が起こるかというと、ほとんどの場合、関数の準備が整った後、背景が直接黒に変わります。「完了」の通知を待っていても、赤い背景は表示されません。
より良い解決策はありますか? setTimeout で数ミリ秒待って、背景が赤に変わるようにします。work() を直接呼び出すと、問題が発生します。
<!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>