Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   jquery hover оставляет шлейф (https://javascript.ru/forum/dom-window/47358-jquery-hover-ostavlyaet-shlejjf.html)

Floyd 20.05.2014 15:16

jquery hover оставляет шлейф
 
Добрый день,
прошу подсказать как избавиться от проблемы.
есть строки, наводя мышку на которые срабатывает
"высплывание" кнопки удаления строки, при убирании мышки - кнопка исчезает.
вот оно: http://sdelaju.ru/hover/

фактически, сам код:
$('.str_block')
	.on( "mouseenter", function() {
		$(this).children(".record_del").animate({ opacity: 1 }, 500);
	})
	.on( "mouseleave", function() {
		$(this).children(".record_del").css({opacity: 0});
	});


при медленном проведении мыши всё ок, если дернешь быстро - остается шлейф непогашенных кнопок.
причем, вешал в mouseleave console.log с номерами строк, должно отрабатывать.
из-за чего такая проблема и как ее можно пофиксить? спасибо.

depp 20.05.2014 15:31

$('.str_block')
	.on( "mouseenter", function() {
		$(this).children(".record_del").show('slow');
	})
	.on( "mouseleave", function() {
		$(this).children(".record_del").hide('fast');
	});

depp 20.05.2014 15:34

проблема в том, что ты ставишь задержку в 500мс.
в итоге когда мышка на элементе, то запускается счетчик, который в течение 500 мс делает свойство opacity = 1. если ты до этого времени мышку с элемента убираешь, то срабатывает opacity = 0, а счетчик еще не завершил свою работу. поэтому когда истекает 500 мс, присваивается opacity = 1

рони 20.05.2014 15:45

Цитата:

Сообщение от Floyd
$(this).stop().children

останавливайте предыдущую анимацию

Floyd 20.05.2014 16:25

Спасибо за ответы, о стопе я и не вспомнил. решилось вот так:
$('.str_block')
	.on( "mouseenter", function() {
		$(this).children(".record_del").animate({ opacity: 1 }, 500);
	})
	.on( "mouseleave", function() {
		$(this).children(".record_del").stop();
		$(this).children(".record_del").css({opacity: 0});
	});


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