Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как не отрабатывать функцию, если в течении секунды мышь обратно пришла на элемент? (https://javascript.ru/forum/events/67318-kak-ne-otrabatyvat-funkciyu-esli-v-techenii-sekundy-mysh-obratno-prishla-na-ehlement.html)

Stay_Strong 10.02.2017 13:15

Как не отрабатывать функцию, если в течении секунды мышь обратно пришла на элемент?
 
Вопрос следующий. Есть выпадающее меню на 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);
});


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

рони 10.02.2017 13:27

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

ksa 10.02.2017 13:27

Цитата:

Сообщение от Stay_Strong
никак не могу решить проблему

Нужно запоминать ссылку на тот setTimeout(), а по возвращении его убивать...
http://javascript.ru/settimeout

Stay_Strong 10.02.2017 13:51

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


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