Ошибка функции после первого цикла

#javascript #jquery #html #loops

#javascript #jquery #HTML #циклы

Вопрос:

У меня есть эта функция, целью которой является изменение класса элементов внутри списка по порядку, а затем повторение. Используя предложение члена SO, мой код выглядит следующим образом:

 <ul class="display" id="imagens-home">
            <li class="invisivel"><img src="img/teste/lanche-1.jpg"/></li>
            <li class="invisivel"><img src="img/teste/lanche-2.jpg"/></li>
            <li class="invisivel"><img src="img/teste/lanche-3.jpg"/></li>
            <li class="invisivel"><img src="img/teste/lanche-4.jpg"/></li>
          </ul>
  

Моя функция:

     var animationIn = 'animated fadeInLeft';
var animationOut = 'animated zoomOut';
var animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';

function animate($items, idx) {
  if (idx >= $items.length) idx = 0; // no more items, stop animating

  var $current = $items.eq(idx);
  $current.removeClass('invisivel').addClass(animationIn).on(animationEnd, function() {
    $current.removeClass(animationIn).addClass(animationOut).on(animationEnd, function() {
      $current.removeClass(animationOut).addClass('invisivel');
      animate($items, idx   1); // try animating the next item
    });
  });

$(document).ready(function() {
  animate($('#imagens-home>li'), 0);
});
  

Проблема в том, что код работает по назначению, перебирая 4 изображения. Однако после этого первого цикла он не исчезает, а переходит прямо к следующему изображению, пропуская анимацию. Это происходит дважды, а затем код перестает работать. В чем может быть причина?

Комментарии:

1. вы проверили свою консоль на наличие каких-либо ошибок?

2. и вы не закрываете фигурную скобку { функции animate()

3. Вы привязываете новое событие к каждому рекурсивному вызову, старые все еще привязаны. Используйте one not on ( jsFiddle ) или установите логику вне рекурсивного метода

4. Проблема действительно on была . Спасибо!

5. @AthMav Нет, OP хочет вызвать его в готовом документе.