Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Анимация массива с элементами, и вызов функции по завершению. (https://javascript.ru/forum/jquery/31210-animaciya-massiva-s-ehlementami-i-vyzov-funkcii-po-zaversheniyu.html)

Broken 30.08.2012 05:54

Анимация массива с элементами, и вызов функции по завершению.
 
Допустим, есть код:

var arr = $('#someId').children('div'); 
$(arr).animate({ 'left':  '-=' +someSize + 'px'}, 500,  "swing",
	 function () {  
	   return someFunction();
	  });


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

Как вариант рассматриваю установку таймера на вызов, но данный вариант мне кажется не очень надежным.

Если кто знает заранее спасибо))

Aetae 30.08.2012 06:13

Один раз прочитайте доки по jquery от начала и до конца, там не так уж много, и вы избавитесь от унылых вопросов на всю жизнь.

LittlePony 30.08.2012 10:20

А что мешает запускать анимацию один раз?
$('#someId').children('div').animate({ 'left':  '-=' +someSize + 'px'}, 500,  "swing",
     function () { 
       return someFunction()
      })


Или .done()

yura_remnev 30.08.2012 10:49

var arr = $('#someId').children('div'); 
//$(arr).animate({ 'left':  '-=' +someSize + 'px'}, 500,  "swing",
//arr у вас уже является оберткой, вы сделали его таким в первой строке, поэтому повторно оборачивать его не нужно
arr.animate({ 'left':  '-=' +someSize + 'px'}, 500,  "swing",
	 function () {
// эта функция будет вызываться для каждого элемента в обертке, а вам требуется вызвать ее только один раз
// Поэтому вам нужно определить завершение анимации на элементах, например так:
	   if (arr.is(":animated").length === 0) return someFunction();
	  });


Кстати Гугл может предложить вам несколько иных вариантов решения.

yura_remnev 30.08.2012 19:56

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 201762)

var $ololos = $( '.ololo' );
var i = $ololos.length;

$ololos.animate( { 'left':'-=' + someSize + 'px'}, 500, function () {
//	if ( --i )	alert( 'конец!' );
	if (! --i )	alert( 'конец!' );
} );

epic FAIL
Представляю как это обидно, ошибиться в коде с таким "четким" комментарием:) Тут что модераторам можно материться?

Aetae 30.08.2012 20:35

Можно и не модераторам, главное по делу.
А ещё можно в статусе себе написать "Модератор" и никто не будет мешать.)


Часовой пояс GMT +3, время: 13:10.