2016-10-18 3 views
0

Я пытаюсь зацикливать функцию, когда обещание является .done(). Кажется, я чего-то не хватает. Какие-нибудь предложения здесь?jQuery зацикливание функции после .promise()

Я хочу, чтобы это выполнялось через функцию, и когда последняя анимация завершена, сделайте это снова.

Я включаю здесь все JS, включая поддерживающие функции.

(function($) { 
    $.fn.shuffle = function() { 
    // credits: http://bost.ocks.org/mike/shuffle/ 
    var m = this.length, t, i; 

    while (m) { 
     i = Math.floor(Math.random() * m--); 

     t = this[m]; 
     this[m] = this[i]; 
     this[i] = t; 
    } 

    return this; 
    }; 
}(jQuery)); 

jQuery.noConflict(); 

jQuery(document).ready(function($) { 

    $.fn.queueAddClass = function(className) { 
     this.queue('fx', function(next) { 
      $(this).addClass(className); 
      next(); 
     }); 
     return this; 
    }; 

    $.fn.animateGrid = function() { 
     $('.grid').shuffle().each(function(index) { 
      $(this).delay(100 * index).queueAddClass('zoom-down'); 
      $('div', this).delay(100 * index).animate({opacity:0.85}, 100); 
     }); 
     $('.grid').promise().done(function(){ 
      $('.grid').animate({opacity:0}, 2000); 
      $('#mosaic').animateGrid(); 
     }); 
    } 

    $('#mosaic').animateGrid(); 

}); 
+0

xy проблема. Проще говоря, неправильный инструмент для работы. https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=how%20to%20loop%20an%20animation%20in%20javascript –

+0

Что именно не работает? – Bergi

+0

Btw, эта функция 'shuffle' ужасна. Элементы в коллекции jQuery всегда должны быть в порядке дерева DOM. – Bergi

ответ

0

Вы только добавлять анимацию к div с в .grid а не .grid сами элементы, так что, когда вы звоните .promise на тех, кто не будет иметь какой-либо очереди ждать. Так что используйте

$.fn.animateGrid = function() { 
    var self = this; 
    this.find('.grid').shuffle().each(function(index) { 
     $(this).delay(100 * index).queueAddClass('zoom-down'); 
     $('div', this).delay(100 * index).animate({opacity:0.85}, 100); 
    }); 
    this.find('.grid div').promise().done(function(){ 
     $('.grid').animate({opacity:0}, 2000); 
     self.animateGrid(); 
    }); 
} 
+0

Элементы .grid добавляют анимации к ним. Зачем вам нужно делать find(), когда селектор работает? –

+0

@DaveMerwin О, верно, я пропустил, что элементы сетки также анимированы. Я использовал 'this.find', потому что в противном случае нет смысла помещать функцию в качестве плагина jQuery :-) – Bergi

+0

Ok. Я явно делаю что-то не так. self.animatedGrid() в конце не работает. Мое ожидание заключается в том, что после того, как обещание будет завершено, а анимация на сетке будет запущена, он должен снова запустить функцию снова. Разве это не так? –

Смежные вопросы