Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.02.2017, 13:15
Аватар для Stay_Strong
Аспирант
Отправить личное сообщение для Stay_Strong Посмотреть профиль Найти все сообщения от Stay_Strong
 
Регистрация: 14.10.2015
Сообщений: 37

Как не отрабатывать функцию, если в течении секунды мышь обратно пришла на элемент?
Вопрос следующий. Есть выпадающее меню на jquery. Суть такая: нужно чтобы после того, как мышь покинула меню, само меню скрывалось через секунду. Однако, при этом, если мышь вернется в течении секунды, то ничего не происходило.

Я пробовал через settimeout. Однако, если я возвращаюсь на предыдущее меню, то оно мгновенно закрывается.

Вызов самого меню:
var animationTime = 100;
var sub = $('.wrap-cat-menu');

$(document).on('mouseenter', 'li.dropdown-cat', function() {
          if (sub.is(':visible')) {
              sub.slideUp(animationTime);
          } else {
              sub.slideDown(animationTime);
          }
          return false;
});


Обработка скрытия меню:
$(document).on('mouseleave', '.dropdown-cat', function() {
          setTimeout(function() {
            sub.slideUp(animationTime);
            return false;
          }, 1000);
});


Однако, никак не могу решить проблему. Помогите, кто может и объясните, пожалуйста, как это работает..

Последний раз редактировалось Stay_Strong, 10.02.2017 в 13:22.
Ответить с цитированием
  #2 (permalink)  
Старый 10.02.2017, 13:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Stay_Strong,
$(document).on('mouseleave', '.dropdown-cat', function() {

            sub.delay(1000).slideUp(animationTime);

});
$(document).on('mouseenter', 'li.dropdown-cat', function() {
          if (sub.is(':visible')) {
              sub.stop(true,true).slideUp(animationTime);
          } else {
              sub.stop(true,true).slideDown(animationTime);//зачем остальной код кроме этой строки, непонятно
          }
          return false;
});
Ответить с цитированием
  #3 (permalink)  
Старый 10.02.2017, 13:27
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Stay_Strong
никак не могу решить проблему
Нужно запоминать ссылку на тот setTimeout(), а по возвращении его убивать...
http://javascript.ru/settimeout
Ответить с цитированием
  #4 (permalink)  
Старый 10.02.2017, 13:51
Аватар для Stay_Strong
Аспирант
Отправить личное сообщение для Stay_Strong Посмотреть профиль Найти все сообщения от Stay_Strong
 
Регистрация: 14.10.2015
Сообщений: 37

рони, благодарю. Я совсем не знал про delay().
ksa, вам тоже спасибо за ссылку. Я так-то читал, зато оттуда узнал про передачу this в функции.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как найти нужный элемент страницы и кликнуть если он имеет тока класс... Александр_1997 Events/DOM/Window 3 18.01.2014 14:34
Как запустить функцию, только если выполнились все события, на которые она подписана Shitbox2 jQuery 4 05.03.2013 10:40
Как получить указатель на элемент вызвавший функцию pelayo Общие вопросы Javascript 9 29.06.2010 23:32
Как запустить функцию если результат клика - true Oracool Events/DOM/Window 1 14.04.2010 11:22
Как вызвать функцию если менять надо не все параметры? britanik Общие вопросы Javascript 3 07.03.2009 23:13