jQuery: мышь все еще находится над элементом? - PullRequest
11 голосов
/ 07 декабря 2009

Я бы хотел определить, находится ли мышь над элементом в следующем сценарии:

  1. Если навести курсор мыши, то поспать несколько секунд.
  2. После того, как проверка сна спит, мышь все еще находится над тем же элементом.
  3. Если это правда, то сделать что-то.

Как мне достичь # 2?

Спасибо.

Ответы [ 6 ]

37 голосов
/ 07 декабря 2009

Это похоже на работу (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'));

});
15 голосов
/ 07 декабря 2009

Взгляните на плагин hoverIntent для jQuery. Он дает вам новый обработчик событий, который будет срабатывать только в том случае, если вы наводили курсор на элемент в течение определенного времени. Изменяя его параметры, вы сможете заставить его делать именно то, что вы хотите.

10 голосов
/ 07 декабря 2009

Просто используйте флаг, чтобы сообщить вам, находится ли мышь над ним.

var mouseover = false;
$('.thing').mouseenter(function(){
    mouseover = true;
}).mouseleave(function(){
    mouseover = false;
});
2 голосов
/ 07 декабря 2009

Вот один из способов:

Когда вы устанавливаете .hover () для элемента, вы можете передать ему 2 функции. Первое срабатывает, когда мышь находится над элементом, второе срабатывает, когда мышь перемещается.

Первая функция может установить currentElementId (или какой-либо другой флаг), а вторая функция сбросит это. Таким образом, единственное, что вам нужно сделать, это проверить, если currentElementId пусто.

1 голос
/ 28 мая 2012

Я использовал гиперссылку, чтобы показать div, а затем на событии hover я установил свойство тайм-аута этого, и как только я перешел к своему div, я сбрасывал время ожидания и начинаю использовать div ' Функция s 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>
1 голос
/ 07 декабря 2009

Вы можете использовать setTimeout( 'sleep', sleep_time ) для вызова функции по истечении установленного времени.

Назначение обработчиков событий для onmouseover и onmouseout.

Эти обработчики модифицируют флаг, чтобы проверить, находится ли мышь на элементе.

Внутри функции сна вы можете проверить флаг и просто вернуть его.

...