Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   правильное применение метода stop() (https://javascript.ru/forum/jquery/28830-pravilnoe-primenenie-metoda-stop.html)

Harvey 04.06.2012 14:22

правильное применение метода stop()
 
Привет!

Есть проблема. Имеется 2 элемента '#tool-bar ul' по наведению и отведению на которые, появляется и скрывается объект dragHere . Проблема в том, что при быстром перемещении курсора туда сюда с первого элемента '#tool-bar ul' на второй и обратно, анимация появления и исчезновения воспроизводится несколько раз(очередь), а должна воспроизвестись только один раз. Я знаю , что проблема решается через метод stop(), но не знаю как правильно им воспользоваться в моем случае. Перепробовал уже кучу вариантов, но ни как.. Код приведен ниже. Подскажите пожалуйста как мне решить проблему?

var dragHere = $('.drag-here');
dragHere.css({opacity: 0}).hide();
$('#tool-bar ul').on('mouseenter', function(){dragHere.show(150).animate({opacity: 1}, 100)})
$('#tool-bar ul').on('mouseleave', function(){dragHere.animate({opacity: 0}, 100).hide(100)})

beard 04.06.2012 14:30

Должно быть так
dragHere.stop().show(150).animate({opacity: 1}, 100)

но не всегда выходит эту жесть профиксить имено stop'ом иногда сам себе выношу моск с такой траблой и использую всякие самые извращенские методы...

Deff 04.06.2012 14:50

var dragHere = $('.drag-here');
 dragHere.css({opacity: 0}).hide();
 var busy = false; //Флаг занятости

$('#tool-bar ul').on('mouseenter', function(){
     if(!busy){busy = true;
      dragHere.show(150).animate({opacity: 1}, 100, "linear", function(){
      busy = false;});
     }
});
$('#tool-bar ul').on('mouseleave', function(){
    if(!busy){busy = true;
      dragHere.animate({opacity: 0}, 100, "linear", function(){
      busy = false;}).hide(100)
    }
})

Harvey 04.06.2012 14:57

Ни первый ни второй вариант не работают как надо. Первый вообще никак, а второй, при быстром переводе курсора с первого элемента на второй вообще не отображает анимацию объекта. В таком случае, это гораздо легче реализовать через колбэк
:(

melky 04.06.2012 15:00

Deff, подведём-отведём мышку, оно анимируется до конца и встанет. верно?

Harvey, http://jsfiddle.net/dBDYs/ Оно ? Я Вас не понял.

beard 04.06.2012 15:01

Harvey, выложи код

Deff 04.06.2012 16:31

melky,
Я не наю точно, что челу нун - возможно делать флаги раздельно на каждый из двух, возможно запуск сворачивания - запускать из сallback разворачивания

Deff 04.06.2012 16:47

Универсально -
Смотреть/cтавить флаг данной анимации(сворачивания или разворачивания), если флаг - true - стопаем все иные анимашки на элемент, флаг на данную анимацию - в FALSE и запускаем свою, в СALLBACK - флаг данной анимации - TRUE ... выходим

melky 04.06.2012 17:28

Цитата:

Сообщение от Deff (Сообщение 178803)
melky,
Я не наю точно, что челу нун - возможно делать флаги раздельно на каждый из двух, возможно запуск сворачивания - запускать из сallback разворачивания

Я, кстати, тоже его не понял.

beard 04.06.2012 17:30

Цитата:

Сообщение от Deff (Сообщение 178753)
var dragHere = $('.drag-here');
 dragHere.css({opacity: 0}).hide();
 var busy = false; //Флаг занятости

$('#tool-bar ul').on('mouseenter', function(){
     if(!busy){busy = true;
      dragHere.show(150).animate({opacity: 1}, 100, "linear", function(){
      busy = false;});
     }
});
$('#tool-bar ul').on('mouseleave', function(){
    if(!busy){busy = true;
      dragHere.animate({opacity: 0}, 100, "linear", function(){
      busy = false;}).hide(100)
    }
})

оказывается я не один:) , когда эта трабла попадается пишу чтото подобно с флагами, но мне такой подход вообще не нравится (

Harvey, тяжело понять что тебе надо, но по моему здесь хороший пример используя стоп при оver и при out, не вижу глюков
Цитата:

Сообщение от melky
Harvey, http://jsfiddle.net/dBDYs/ Оно ? Я Вас не понял.



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