通常、setTimeout()メソッドの実行は、setTimeout()メソッドの外部にあるclearTimeout()メソッドによって中止されますが、私の状況では、ループ自体の中でsetTimeout()ループの実行を中止する必要があります。イベントは、指定された「待機期間」中に発生します。
以下に示す私のコードでは、ユーザーはコードAをアクティブ化するのに500ミリ秒かかります。時間枠内にコードAをアクティブ化できなかった場合、コードBはフォールバックとして実行されます。コード内でAIは2つの場所をマークしました:1)タイムアウトを停止する場所と2)関数を終了したい場所。
私のJavaScriptとHTMLコードのコピーを以下に示します。
HTML
<table id="headMenu">
<tr>
<td id="head1">Item 1</td>
<td id="head2">Item 2</td>
<td id="head3">Item 3</td>
</tr>
</table>
<table id="subMenu">
<tr>
<td>Dynamic Content!</td>
</tr>
</table>
JavaScript
a = 500;
document.getElementById("head1").onmouseover = function(displayMenu) {
document.getElementById("subMenu").innerHTML = "<tr><td>Item A</td><td>Item B</td><td>Item C</td></tr>";
document.getElementById("head1").onmouseout = function(getScroll) {
setTimeout(function() {
document.getElementById("subMenu").onmouseover = function(breakTimeout) { // **Code A**
a = 10000;
// **Stop timeout.** Now never execute Code B.
document.getElementById("subMenu").onmouseout = function(endFunction) {
document.getElementById("subMenu").innerHTML = '<tr><td>Content is Dynamic!</td></tr>';
// **Exit function here immediately**
}
}
if(a==500){
//**Code B**: Only execute if **Code A** never executed within time frame
document.getElementById("subMenu").innerHTML = '<tr><td>Dynamic Content!</td></tr>';
}
}, a)
}
}
私のデザインのコンセプトもはっきりしているといいのですが。私のコードと説明が十分に明確でない場合は、さらに質問を明確にして喜んでいます。
答えを得ることができる人に感謝し、+ 1!