Как выполнять действие пока мышь находится над элементом?

Доброго времени суток!

Подскажите пожалуйста как выполнять событие (в моем случае это +20 к скроллу элемента), при наведении мыши на другой элемент? Т.е. пока мышь наведена - плавно скроллим блок.

let row = document.getElementsByClassName('row')[0]

row.scrollBy({ 
  top: 0,
  left: 20,
  behavior: 'smooth' 
})
  • Вопрос задан
  • 544 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Интерактивный пример

let isHovering = false;
let intervalId = null;

targetElement.addEventListener('mouseenter', () => {
  isHovering = true;

  intervalId = setInterval(() => {
    if (!isHovering) {
      clearInterval(intervalId);
      return;
    }

    row.scrollBy(/* params */);
  }, 16)
});

targetElement.addEventListener('mouseleave', () => {
  isHovering = false;

  if (intervalId) {
    clearInterval(intervalId);
  }
});


Можно обойтись и меньшим кодом:
let intervalId = null;

targetElement.addEventListener('mouseenter', () => {
  intervalId = setInterval(() => {
    row.scrollBy(/* params */);
  }, 16)
});

targetElement.addEventListener('mouseleave', () => clearInterval(intervalId));

Но этот вариант мне не очень нравится своей неявностью.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@LiguidCool
https://api.jquery.com/hover/
У нативного JS будет примерно тоже.
Ответ написан
Комментировать
Andchir
@Andchir
PHP/Python/JS Фуллстек
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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