次のシナリオで、マウスがまだ要素の上にあるかどうかを検出できるようにしたいと思います。
- マウスオーバーした場合は、数秒間スリープします。
- 一度眠りにつくと、マウスのチェックはまだ同じ要素の上にあります。
- trueの場合、何かを実行します。
どうすれば#2を達成できますか?
ありがとうございました。
次のシナリオで、マウスがまだ要素の上にあるかどうかを検出できるようにしたいと思います。
どうすれば#2を達成できますか?
ありがとうございました。
これはうまくいくようです(http://jsbin.com/uvoqe)
$("#hello").hover( function () {
$(this).data('timeout', setTimeout( function () {
alert('You have been hovering this element for 1000ms');
}, 1000));
}, function () {
clearTimeout($(this).data('timeout'));
});
jQuery用のhoverIntentプラグインを見てください。これは、特定の時間要素にカーソルを合わせた場合にのみ起動する新しいイベントハンドラーを提供します。そのオプションを微調整することにより、あなたはそれがあなたが望むことを正確に行うようにすることができるはずです。
フラグを使用して、マウスがその上にあるかどうかを通知します。
var mouseover = false;
$('.thing').mouseenter(function(){
mouseover = true;
}).mouseleave(function(){
mouseover = false;
});
これが1つの方法です:
要素に.hover()を設定すると、2つの関数を要素に渡すことができます。1つ目は、マウスが要素の上にあるときに起動し、2つ目は、マウスが外に移動したときに起動します。
最初の関数はcurrentElementId
(または他のフラグ)を設定でき、2番目の関数はそれをクリアします。このようにあなたがする必要がある唯一のことcurrentElementId
は空白であるかどうかをチェックすることです。
setTimeout( 'sleep', sleep_time )
設定した時間後に関数を呼び出すために使用できます。
イベントハンドラーをonmouseoverとonmouseoutに割り当てます。
これらのハンドラーはフラグを変更して、マウスがまだ要素上にあるかどうかを確認します。
スリープ機能内では、フラグを確認して返すだけです。
ハイパーリンクを使用してを表示し、div
イベントhover
時にこれのタイムアウトプロパティを設定し、に移動するとすぐにdiv
タイムアウトをクリアし、div
のhover
関数を使用してをフェードアウトし始めdiv
ます。これがお役に立てば幸いです。
<script type="text/javascript">
$(document).ready(function () {
var obj;
$("a").hover(function () {
if ($("#div1").is(":hidden")) {
$("#div1").fadeIn(300).show();
}
}, function () {
obj = setTimeout("jQuery('#div1').fadeOut(300);", 300);
});
$("#div1").hover(function () {
clearTimeout(obj);
if ($("#div1").is(":hidden")) {
$("#div1").show();
}
}, function () {
jQuery('#div1').fadeOut(300);
});
});
</script>