2011-06-17 2 views
1

Я играл вокруг с скованной анимацией, и это озадачило меня довольно многоWeird анимация очередь

У меня есть только один элемент, анимированы, но эффект «дрожания» остается в нижнюю части очереди ,

.animate().animate().effect('shake',{times:3},10).animate().... 

онлайн упрощенный вариант: http://jsfiddle.net/ottoln/F9xfD/3/

не совсем понимаю, почему ... кто?

скрипка он, вероятно, имел в виду, чтобы ссылка:http://jsfiddle.net/ottoln/F9xfD/

+4

Вы уверены, что это правильная скрипка? Я не могу найти '.effect()' – Phil

+3

, так как анимация цепочки работает в jQuery, не так ли? Второй 'animate()' будет запускаться после завершения первого. – bzlm

+2

Опишите, чего вы ожидали. Мы не можем определить из вашего кода: все, что мы знаем из вашего кода, - это то, что происходит _does_. И в вашем тестовом сценарии нет 'effect()'. –

ответ

0

Throw в promise() & done() там, чтобы убедиться, что fx полностью решены, прежде чем продолжить анимацию:

$('#bunda').animate({ 
    marginTop: '+=200', 
    marginLeft: '+=150' 
}, 1300).animate({ 
    marginTop: '-50', 
    marginLeft: '+=100', 
    'background-color': 'darkred' 
}, 1000).effect('shake', { 
    times: 3 
}, 50).promise().done(function(){ 
$(this).animate({ 
    marginTop: '+=300' 
}, 500); 
}); 

пример: http://jsfiddle.net/niklasvh/MtkaY/

+0

Спасибо, ребята. @configurator: так 'effect()' фактически работает в другой очереди, а не fx? @Niklas: Спасибо за обещанное(). Done(), я не знал этих методов. Это немного раздражает, что вы должны постоянно использовать анонимные функции в обратных вызовах ... это делает код очень уродливым. @ tomalak-geretkal: Извините, чувак, я отправил неправильную версию jsfiddle. справа один должен был быть: http://jsfiddle.net/ottoln/F9xfD/ веселит Отто –

0

Метод effect не находится в очереди точно так же, как и остальные анимированные вызовы, bu t он принимает обратный вызов в качестве параметра, который будет запускаться после завершения эффекта. Вы можете сделать это вместо того, чтобы:

$('#bunda').animate({ 
    marginTop: '+=200', 
    marginLeft: '+=150' 
}, 1300).animate({ 
    marginTop: '-=50', 
    marginLeft: '+=100', 
    'background-color': 'darkred' 
}, 1000).effect('shake', { 
    times: 3, 
}, 50, function() { 
    $('#bunda').animate({ 
     marginTop: '+=300' 
    }, 500); 
}); 

Пример: http://jsfiddle.net/CCw9U/

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

  • Нет связанных вопросов^_^