複数の画像を積み重ねた設定があります(image1 =通常のアイコン、image2 =強調表示されたアイコン)。
私の目的は、アイコンを強調表示し、処理を行ってから、アイコンを通常に戻すことです。また、可能な限り高速に処理します。ボトルネックは、「ハイライト」を表示するための回避策です。
これを実現するために、.style.visibility = {"hidden"、"visible"}を切り替えるだけです。
私が見ている動作は、最新のスタイルのみが表示され、関数が終了するまで更新されないというものです。SOに関する私の調査から、次のことがわかりました。
- .style.visibilityまたは.style.displayのオンとオフを切り替えて、再描画を強制します
- 正しい動作が見られませんでした。表示されている最新のアップデートのみ
- setTimeout(callback、0)またはsetInterval(callback、0)
を使用します
- 期待どおりに動作します。ただし、ブラウザが「最小待機時間」を強制しているため、コードは必要な速度で実行されていません。
- setInterval()関数の実装では、1つの操作を実行するために関数を2回呼び出す必要があります(1回は強調表示し、2回目は処理してから、強調表示を解除します)。
- 必要に応じてコードをアップロードできます
最後のスタイルのみが表示されることを示すために、簡単なサンプルコードを添付しました
<!doctype html>
<head>
<title>test redraw</title>
</head>
<body>
<img id="logo"
src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg=="
alt="Red dot from wikipedia" /></img>
<script>
function pausecomp(ms) {
ms += new Date().getTime();
while (new Date() < ms) {
}
}
function hide_then_show() {
var id = document.getElementById("logo");
pausecomp(1000);
id.style.display = "none";
id.parentNode.style.display = "none";
id.parentNode.style.display = "block";
pausecomp(1000);
id.style.display = "block";
id.parentNode.style.display = "none";
id.parentNode.style.display = "block";
}
window.addEventListener("click", hide_then_show());
</script>
</body>
</html>
任意の提案をいただければ幸いです。私がこれに最善の方法で近づいているかどうかはわかりません