非アクティブ状態が約 5 秒間タイムアウトした後、メニュー バーを部分的に非表示にしようとしています。メニューはページの上部から 20px の位置にあり、基本的な考え方は、メニューが上に移動した後もメニューの小さなセクションが表示され、ユーザーがこれにカーソルを合わせて再びドロップダウンできるようにすることです (うまくいけば、これにより検出!)。
私はアニメーション側を管理しましたが、タイムアウトではありません。何か案は?
非アクティブ状態が約 5 秒間タイムアウトした後、メニュー バーを部分的に非表示にしようとしています。メニューはページの上部から 20px の位置にあり、基本的な考え方は、メニューが上に移動した後もメニューの小さなセクションが表示され、ユーザーがこれにカーソルを合わせて再びドロップダウンできるようにすることです (うまくいけば、これにより検出!)。
私はアニメーション側を管理しましたが、タイムアウトではありません。何か案は?
mouseout
メニューを表す のイベントを使用して、div
次のような関数を実装する必要があります。
var waitingForMenuToHide = false;
function myOnMouseOut() {
waitingForMenuToHide = true;
setTimeout(function() {
if (waitingForMenuToHide) {
// Hide the menu div...
}
}, 5000);
}
変数をリセットするmouseover
イベント:waitingForMenuToHide
function myMouseOver() {
waitingForMenuToHide = false;
}
残念ながら、jQuery には遅延機能がありません。ただし、要素の不透明度を 1 から 1 にアニメーション化することにより、遅延をシミュレートするために卑劣であまり汚れていないハックを使用できます。
$('#visibleElement') // Assuming the element is already shown
.animate({opacity: 1.0}, 3000); // do nothing for 3 seconds
マウスが離れてから 5 秒後にメニューを上にスライドするには、次のようにします。
$('#menuDiv').mouseout(function(){
.animate({opacity: 1.0}, 5000)
.animate( slide up etc...
});
HoverIntent を見てみてください。 http://cherne.net/brian/resources/jquery.hoverIntent.html
これにより、ユーザーがメニューとの対話を停止した後、遅延してアクションを実行することが非常に簡単になります。
mouseout イベントで、要素を上にスクロールするためのコールバックでタイムアウトを開始します。マウスオーバー イベントでタイムアウトが発生した場合は、次のコマンドを使用して強制終了します。
clearTimeout(timer);
したがって、次のようになります。
var timer;
$('mybar').mouseover(function(){clearTimeout(timer);/* Animate down code here */});
$('mybar').mouseout(function(){timer=setTimeout(function(){/* Animate up Code Here */}, 5000);});