2015-02-13 5 views
-1

Я запускаю эту анимацию на $(window).scroll(), и она работает отлично по большей части.Убейте только одну анимацию

$('#el').animate({ left: toMove }, 500); 

Проблема заключается в том, если пользователь прокручивает слишком быстро, две анимации будет срабатывать и вторая анимация будет срабатывать до того, как первый один переместилась достаточно далеко. Как я могу убедиться, что в любой момент времени есть только одна анимация, а затем последуют другие анимации? Мне нужен элемент для анимации слева ПОЛНОСТЬЮ любая другая анимация запускается, но мне нужно, чтобы все они запускались. Я попытался использовать .queue(), но не смог найти подходящее решение.

+0

просьбы представить скрипку –

+0

Вы должны дребезг OnScroll события с помощью тайм-аута, например, НО вы можете использовать вместо этого: '$ ('# el: not (: animated)'). Animate ({left: toMove}, 500);' –

+0

Вам бы лучше предоставить конкретный образец, реплицирующий вашу проблему, jsFiddle, может быть, и так или иначе, *** у вас есть ***, чтобы опубликовать весь соответствующий код? –

ответ

2

Вы можете использовать функцию stop так, чтобы сгладить вещи:

$('#el').stop(true, false).animate({ left: toMove }, 500); 

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

Редактировать

Если вы хотите, чтобы анимация до конца, прежде чем анимировать снова вам просто нужно позвонить .stop(true, true) вместо

+0

Я думаю, что '.stop()' вполне достаточно –

+0

не очистит очередь анимации, вы можете испустить вторую ложь, хотя – Tomzan

+0

Как я угадываю вопрос, это не исправило бы это –

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