Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.08.2010, 14:34
Аватар для niksan
Новичок на форуме
Отправить личное сообщение для niksan Посмотреть профиль Найти все сообщения от niksan
 
Регистрация: 09.08.2010
Сообщений: 9

Событие hover только после 2 секунд
Как сделать ,чтобы свершалось событие hover, только в случае, если мышка держится на элементе 2 секунды, если меньше, то ничего.?
Ответить с цитированием
  #2 (permalink)  
Старый 11.08.2010, 14:42
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

$( element ).hover(function () {
	window.initHandler = setTimeout( handler, 2000 );
	var $this = this;
	function handler() {
		alert( $this ); // Используем выбранный jQuery-объект внутри другой функции
	}
}, function () {
	clearTimeout( window.initHandler );
});
Ответить с цитированием
  #3 (permalink)  
Старый 12.08.2010, 09:40
Аватар для niksan
Новичок на форуме
Отправить личное сообщение для niksan Посмотреть профиль Найти все сообщения от niksan
 
Регистрация: 09.08.2010
Сообщений: 9

exec, спасибо, все получилось! )
Ответить с цитированием
  #4 (permalink)  
Старый 12.08.2010, 10:15
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

exec,
а если элементов несколько? window.initHandler-то один.
Ответить с цитированием
  #5 (permalink)  
Старый 12.08.2010, 10:21
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

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

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] );
	});
});


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

Последний раз редактировалось exec, 12.08.2010 в 10:27.
Ответить с цитированием
  #6 (permalink)  
Старый 12.08.2010, 10:33
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Кстати, если нужна какая-то тривиальная вещь, наподобие меню, вполне можно использовать .delay()
$("#menu li").hover(
	function(){
		$("ul", this).delay(2000).slideDown();
	},
	function(){
		$("ul", this).stop(true, true).slideUp();
	}
)
Ответить с цитированием
  #7 (permalink)  
Старый 12.08.2010, 12:59
Аватар для niksan
Новичок на форуме
Отправить личное сообщение для niksan Посмотреть профиль Найти все сообщения от niksan
 
Регистрация: 09.08.2010
Сообщений: 9

delay, вроде вызовет действие в любом случае, просто через промежуток времени. я не прав? Просто нет сейчас возможности проверить, извиняюсь..
Ответить с цитированием
  #8 (permalink)  
Старый 12.08.2010, 13:16
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

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

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


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переход по ссылке только после нескольких кликов по ней smilexpo Events/DOM/Window 8 24.11.2009 15:57
Событие после обновления страницы ajax'ом kryzhovnik Events/DOM/Window 4 07.10.2009 21:32
Как вызвать событие после события определенного в onchange Наталья Events/DOM/Window 2 12.09.2009 12:51
У элемента img внутри form пропадает событие после onsubmit формы Eugene Events/DOM/Window 2 18.06.2009 18:21