serii81
@serii81
Я люблю phр...

Как поправить setInterval в javascript?

Есть такая задача, при наведении на ссылку, нужно чтобы плавно менялись элементы внутри. Первый я скрыл при помощи css.

ul.small-menu
    li
        a(href="#")
            .small-menu__item
                img(src="assets/i/small-menu/Prodotti.jpg" alt="")
                h2 Prodotti
            .small-menu__item
                img(src="assets/i/small-menu/Prodotti.jpg" alt="")
                h2 Prodotti
            .small-menu__item
                img(src="assets/i/small-menu/Prodotti.jpg" alt="")
                h2 Prodotti
    li
        a(href="#")
            .small-menu__item
                img(src="assets/i/Ricette.jpg" alt="")
                h2 Ricette
    li
        a(href="#")
            img(src="assets/i/Specialita.jpg" alt="")
            h2 Guida alla bistecca perfetta


Я задал setInterval, но он у меня не меняется на 'counter finish', когда счетчик равен количеству элементов в блоке.

let changeSmallMenuItem = function () {
    let counter = 1;
    const elemLength = $('.small-menu__item').length - 1;

    if (counter === elemLength.length) {
      console.log('counter finish');
    } else {
      let counterInerval = setInterval(() => {
        if (counter === elemLength.length) {
          console.log('counter finish');
        } else {
          console.log(counter++);
        }
      }, 1000);
    }
  };

  $('.small-menu a').hover(function () {
    changeSmallMenuItem();
  }, function () {
    clearInterval(countInterval);
  });


По-моему я перемудрил с setInterval.

За ранее благодарен за подсказку.

Придется подтянуть js.
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
gscraft
@gscraft
Программист, философ
Так Вы, похоже, не делаете clearInterval(countInterval); когда выполняется условие по счетчику? И потом, если используете jQuery, анимировать можно и без таймера, навскидку:
const animate = ($elements, index) => {
  if (index < $elements.length)
    $elements.eq(index).animate({...}, {...}, () => animate($elements, index+1));
}
animate($(selector), 0);

— jQuery сам анимирует, а по завершению цикла анимации вызовет обработчик, куда передаем следующий шаг (который можно сформировать любым удобным образом, в данном случае некая условная анимация элементов по списку), а когда индекс выйдет за границы селектора — вызова не будет, выполнение завершится.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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