Javascript.RU

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

правильное применение метода 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)})
Ответить с цитированием
  #2 (permalink)  
Старый 04.06.2012, 14:30
Профессор
Отправить личное сообщение для beard Посмотреть профиль Найти все сообщения от beard
 
Регистрация: 08.05.2012
Сообщений: 264

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

но не всегда выходит эту жесть профиксить имено stop'ом иногда сам себе выношу моск с такой траблой и использую всякие самые извращенские методы...
Ответить с цитированием
  #3 (permalink)  
Старый 04.06.2012, 14:50
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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

Последний раз редактировалось Deff, 04.06.2012 в 14:52.
Ответить с цитированием
  #4 (permalink)  
Старый 04.06.2012, 14:57
Аспирант
Отправить личное сообщение для Harvey Посмотреть профиль Найти все сообщения от Harvey
 
Регистрация: 19.08.2011
Сообщений: 61

Ни первый ни второй вариант не работают как надо. Первый вообще никак, а второй, при быстром переводе курсора с первого элемента на второй вообще не отображает анимацию объекта. В таком случае, это гораздо легче реализовать через колбэк
Ответить с цитированием
  #5 (permalink)  
Старый 04.06.2012, 15:00
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

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

Harvey, http://jsfiddle.net/dBDYs/ Оно ? Я Вас не понял.
Ответить с цитированием
  #6 (permalink)  
Старый 04.06.2012, 15:01
Профессор
Отправить личное сообщение для beard Посмотреть профиль Найти все сообщения от beard
 
Регистрация: 08.05.2012
Сообщений: 264

Harvey, выложи код
Ответить с цитированием
  #7 (permalink)  
Старый 04.06.2012, 16:31
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

melky,
Я не наю точно, что челу нун - возможно делать флаги раздельно на каждый из двух, возможно запуск сворачивания - запускать из сallback разворачивания
Ответить с цитированием
  #8 (permalink)  
Старый 04.06.2012, 16:47
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Универсально -
Смотреть/cтавить флаг данной анимации(сворачивания или разворачивания), если флаг - true - стопаем все иные анимашки на элемент, флаг на данную анимацию - в FALSE и запускаем свою, в СALLBACK - флаг данной анимации - TRUE ... выходим
Ответить с цитированием
  #9 (permalink)  
Старый 04.06.2012, 17:28
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Deff Посмотреть сообщение
melky,
Я не наю точно, что челу нун - возможно делать флаги раздельно на каждый из двух, возможно запуск сворачивания - запускать из сallback разворачивания
Я, кстати, тоже его не понял.
Ответить с цитированием
  #10 (permalink)  
Старый 04.06.2012, 17:30
Профессор
Отправить личное сообщение для beard Посмотреть профиль Найти все сообщения от beard
 
Регистрация: 08.05.2012
Сообщений: 264

Сообщение от Deff Посмотреть сообщение
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/ Оно ? Я Вас не понял.

Последний раз редактировалось beard, 04.06.2012 в 17:32.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка существования метода alex1covo Общие вопросы Javascript 6 27.03.2012 16:46
Применение метода к объекту Kiomot jQuery 1 11.07.2011 16:14
Ajax разбор метода mycoding jQuery 14 21.05.2010 10:57