Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Событие hover только после 2 секунд (https://javascript.ru/forum/jquery/11171-sobytie-hover-tolko-posle-2-sekund.html)

niksan 11.08.2010 15:34

Событие hover только после 2 секунд
 
Как сделать ,чтобы свершалось событие hover, только в случае, если мышка держится на элементе 2 секунды, если меньше, то ничего.?

exec 11.08.2010 15:42

$( element ).hover(function () {
	window.initHandler = setTimeout( handler, 2000 );
	var $this = this;
	function handler() {
		alert( $this ); // Используем выбранный jQuery-объект внутри другой функции
	}
}, function () {
	clearTimeout( window.initHandler );
});

niksan 12.08.2010 10:40

exec, спасибо, все получилось! )

subzey 12.08.2010 11:15

exec,
а если элементов несколько? window.initHandler-то один.

exec 12.08.2010 11:21

Тогда надо писать что-то вроде

window.initHandlers = [];
$( collection ).each(function ( i ) {
	$( this ).hover(function () {
		window.initHandlers[i] = setTimeout( handler, 2000 );
		var $this = this;
		function handler() {
			alert( $this ); // Используем выбранный jQuery-объект внутри другой функции
		}
	}, function () {
		clearTimeout( window.initHandlers[i] );
	});
});


Хотя и первый вариант сработает, если элементы не вложены друг в друга.

subzey 12.08.2010 11:33

Кстати, если нужна какая-то тривиальная вещь, наподобие меню, вполне можно использовать .delay()
$("#menu li").hover(
	function(){
		$("ul", this).delay(2000).slideDown();
	},
	function(){
		$("ul", this).stop(true, true).slideUp();
	}
)

niksan 12.08.2010 13:59

delay, вроде вызовет действие в любом случае, просто через промежуток времени. я не прав? Просто нет сейчас возможности проверить, извиняюсь..

subzey 12.08.2010 14:16

Да, но .stop() очищает очередь анимации, поэтому действия при уведении курсора не происходит.

Это не универсальный подход, но для, например, выпадающих меню подходит хорошо.


Часовой пояс GMT +3, время: 01:09.