11

次のシナリオで、マウスがまだ要素の上にあるかどうかを検出できるようにしたいと思います。

  1. マウスオーバーした場合は、数秒間スリープします。
  2. 一度眠りにつくと、マウスのチェックはまだ同じ要素の上にあります。
  3. trueの場合、何かを実行します。

どうすれば#2を達成できますか?

ありがとうございました。

4

6 に答える 6

37

これはうまくいくようです(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'));

});
于 2009-12-07T02:05:23.523 に答える
15

jQuery用のhoverIntentプラグインを見てください。これは、特定の時間要素にカーソルを合わせた場合にのみ起動する新しいイベントハンドラーを提供します。そのオプションを微調整することにより、あなたはそれがあなたが望むことを正確に行うようにすることができるはずです。

于 2009-12-07T01:35:38.610 に答える
10

フラグを使用して、マウスがその上にあるかどうかを通知します。

var mouseover = false;
$('.thing').mouseenter(function(){
    mouseover = true;
}).mouseleave(function(){
    mouseover = false;
});
于 2009-12-07T00:55:10.397 に答える
2

これが1つの方法です:

要素に.hover()を設定すると、2つの関数を要素に渡すことができます。1つ目は、マウスが要素の上にあるときに起動し、2つ目は、マウスが外に移動したときに起動します。

最初の関数はcurrentElementId(または他のフラグ)を設定でき、2番目の関数はそれをクリアします。このようにあなたがする必要がある唯一のことcurrentElementIdは空白であるかどうかをチェックすることです。

于 2009-12-07T00:53:20.583 に答える
1

setTimeout( 'sleep', sleep_time )設定した時間後に関数を呼び出すために使用できます。

イベントハンドラーをonmouseoverとonmouseoutに割り当てます。

これらのハンドラーはフラグを変更して、マウスがまだ要素上にあるかどうかを確認します。

スリープ機能内では、フラグを確認して返すだけです。

于 2009-12-07T00:55:01.953 に答える
1

ハイパーリンクを使用してを表示し、divイベントhover時にこれのタイムアウトプロパティを設定し、に移動するとすぐにdivタイムアウトをクリアし、divhover関数を使用してをフェードアウトし始め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>
于 2012-05-28T11:51:09.600 に答える