2012-06-18 2 views
1

Есть ли способ вызвать событие mouseover только после того, как мышь зависела в течение 1 секунды на элементе?jQuery mouseover с синхронизацией

$("img").mouseover(function() { 

$(this).animate({opacity:1}, 200); 

}); 
+1

Вы можете посмотреть на http://cherne.net/brian/resources/jquery.hoverIntent.html – j08691

+0

Проверьте следующую ссылку: [Tricky delay on mouseover] (http://stackoverflow.com/questions/1510594/tricky-delay-on-mouseover) –

ответ

1
$("img").mouseover(function() { 
    $(this).delay(1000).animate({opacity:1}, 200); 
}).mouseleave(function() { 
    $(this).clearQueue().stop().animate({opacity:0.2},200); 
});​ 

DEMO

+0

.clearQueue(). Stop() исправил мою проблему. Огромное спасибо. – Mali

2

Вы можете использовать плагин hoverIntent() JQuery найти здесь: http://cherne.net/brian/resources/jquery.hoverIntent.html

Кроме того, убедитесь, что вы будьте осторожны при использовании этих видов вещей, как они не работают на мобильных браузерах или что-нибудь с помощью прикосновения экран.

+0

Да, если приложение сенсорного экрана не имеет встроенного указателя мыши или эквивалента, который может быть обнаружен как событие зависания. –

0

Вы должны использовать функцию setTimeOut.

setTimeOut(function(){$("img").mouseover(function() { 

     $(this).animate({opacity:1}, 200); 

}); 
},1000); 

Требуется время в миллисекундах.

0

вы можете создать функцию таймера (см. [1]), которая обрабатывает ваше событие спустя 1 секунду. Вы можете сохранить эту функцию в массиве или непосредственно в «окне», чтобы она могла быть отменена, если «выключение мыши» происходит до срабатывания функции таймера.

[1] http://www.w3schools.com/js/js_timing.asp

3

http://jsfiddle.net/tqa2J/1/

$("img").on("mouseover mouseout", function() { 
    var tid = 0; 
    return function(e) { 
     var elem = $(this); 
     clearTimeout(tid); 
     if (e.type == "mouseover") { 
      tid = setTimeout(function() { 
       elem.stop(true).animate({ 
        opacity: 1 
       }, 200); 
      }, 1000); 
     } 
     else { 
      console.log(elem); 
      elem.stop(true).animate({ 
       opacity: 0.3 
      }, 200); 
     } 

    }; 
}());​ 
+3

20 строк кода для ответа jQuery ??? Pfft .. * Напишите меньше * моя задница. – rlemon

+0

Следует отметить: hoverIntent составляет ~ 1,5 кбайт кода (минимизировано), это решение похоже на 0.01kb, как есть. – rlemon

+0

@rlemon это также имеет модуль отладки встроенного 'console.log (elem);' – Esailija