aliencash
@aliencash
Партизан

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

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

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

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

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

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

document.addEventListener('mouseout', ({ target: t }) => {
  const { interval } = t.dataset;
  if (interval) {
    clearInterval(interval);
    delete t.dataset.interval;
  }
});

или

document.querySelectorAll('.pic').forEach(n => {
  n.addEventListener('mouseenter', onHover);
  n.addEventListener('mouseleave', onHover);
});

function onHover({ type, target: t }) {
  const d = t.dataset;
  if (type === 'mouseenter' && !d.interval) {
    d.interval = bgRotate(t);
  } else if (type === 'mouseleave') {
    clearInterval(d.interval);
    delete d.interval;
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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