aliencash
@aliencash
Партизан

Как остановить setInterval из другой функции?

Есть такой код https://codepen.io/aliencash/pen/EryvRy

На странице есть куча блоков с бэкграундами, одному блоку соответствуют 4 бэкграунда. Нужно чтобы по наведению мыши на блок его бэкграунды начинали чередоваться с интервалом 1 секунда. А при mouse leave снова показывался первый бэкграунд.

Не могу понять как мне "отключить" setInterval.

ps: в js понимаю мало.

pps: еще такой артефакт обнаружил, если на один блок несколько раз "навести мышь-убрать мышь", по каждому наведению запустится свой setInterval. Само собой нужно чтобы он был только один.
  • Вопрос задан
  • 411 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
document.addEventListener('mouseover', function(e) {
  if (e.target.classList.contains('pic')) {
    const interval = e.target.dataset.interval;
    if (!interval) {
      e.target.dataset.interval = bgRotate(e.target);
    }
  }
});

document.addEventListener('mouseout', function(e) {
  const interval = e.target.dataset.interval;
  if (interval) {
    clearInterval(interval);
    delete e.target.dataset.interval;
  }
});

или

document.querySelectorAll('.pic').forEach(n => {
  let interval = null;
  n.addEventListener('mouseover', () => {
    if (!interval) {
      interval = bgRotate(n);
    }
  });
  n.addEventListener('mouseout', () => {
     clearInterval(interval);
     interval = null;
  });
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект