@lagudal

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

есть такая конструкция: по ховер на родительский селектор становится видимым дочерний, но выход нужно сделать с задержкой, т.е. когда курсор уходит с нужной области, скрыть дочерний, но через 1 секунду.
При этом, если в течении этой секунды курсор вернулся в эту область, то отменить исполнение скрипта.
Как видно на простом примере, скрипт у меня в любом случае исполнится после таймаута.
Как проще решить?
  • Вопрос задан
  • 50 просмотров
Решения вопроса 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);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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