2012-04-11 3 views
4

Как вы можете видеть на this Fiddle, я анимирую более одного элемента сразу, , что происходит, как я желаю. Но на следующем шаге я хотел бы сделать что-то еще, анимация для всех элементов окончена. Который не кажется возможным, используя полную функцию, потому что он запускается для КАЖДОЙ завершенной анимации (3 элемента, 3 раза полный обратный вызов). JQuery .animate() API также говорит:callback для jquery анимации для нескольких элементов

Если несколько элементов анимации, обратный вызов выполняется один раз в совпавшего элемента, а не один раз для анимации в целом.

Итак, вы знаете, что я могу сделать, чтобы событие было запущено, когда закончилась каждая анимация?

ответ

3
...animate(...).promise().done(function(){console.log("animate complete!")}) 
+1

О, круто, спасибо за это! очень полезно .. –

+0

Простой, элегантный, полностью jQuery. Очень хорошо. –

+0

Хорошее решение, хорошее место! – Bigood

0

Вы можете создать переменную и сосчитать каждый раз, когда анимация закончена. Если он равен 3 (или любой другой номер, который вы хотите), вызовите другую функцию. Смотрите эту jsfiddle

function animateAll(){ 
if(flag) return; 
flag = true; 
//$('.list-wrapper').scrollLeft(w); // not sure why you need this 
//$('.table-wrapper').scrollLeft(w); // or this 
$('.list-wrapper, .table-wrapper').animate({ 
    scrollLeft: 2*w, 
    }, function(){ 
     countAni++; 
     console.log('finish'); 
     if(countAni == 3) finishAni() 
    }  
); 
function finishAni(){ 
    alert('whoohoo ready'); 
    flag = false; 
} 
+0

мне нужно сначала расположить элементы, вот почему я scrollLeft первую очередь ... –

0

В вашем случае, вы можете просмотреть в настоящее время анимированные с:

$(':animated').length 

и полного обратного вызова:

if($(':animated').length==1) 
    console.log('whoohoo ready'); 

http://jsfiddle.net/Pz5YB/25/

+1

ничего себе. я бы не пришел к этому. Раньше я не знал об анимированном селекторе. должен быть связан в .animate() статье, я думаю? определенно помог мне. –

0

The A ccepted ответ был немного непонятен мне вначале, как обрабатывать несвязанные элементы. В конце концов я пришел к этому ответу:

$.when(
    $someElement.animate(...).promise(), 
    $someOtherElement.animate(...).promise() 
).done(function() { 
    console.log("whoohoo ready"); 
}); 
Смежные вопросы