Задать вопрос
@lagudal

Как отложить исполнение mouseleave — если за время таймаута курсор вернулся в область, то отменить?

есть такая конструкция: по ховер на родительский селектор становится видимым дочерний, но выход нужно сделать с задержкой, т.е. когда курсор уходит с нужной области, скрыть дочерний, но через 1 секунду.
При этом, если в течении этой секунды курсор вернулся в эту область, то отменить исполнение скрипта.
Как видно на простом примере, скрипт у меня в любом случае исполнится после таймаута.
Как проще решить?
  • Вопрос задан
  • 64 просмотра
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию + ИИ
    6 месяцев
    Далее
Решения вопроса 2
@historydev Куратор тега JavaScript
$('.block').hover(function (){
  $('.subblock').addClass('active');
})
$('.block').mouseleave(function (){
  const t = setTimeout(function () {
      $('.subblock').removeClass('active');
    },1000)
  $('.block').mouseenter(_ => {
    clearTimeout(t)
  })
})
Ответ написан
Комментировать
v3shin
@v3shin
Веб-шаман
// on mouseleave
leaveTimeout = setTimeout(function () {
    $('.subblock').removeClass('active');
},1000);

// on enter
if (leaveTimeout) clearTimeout(leaveTimeout);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы