Подумав об этом немного сложнее об этом, я понял, что то, что вы пытаетесь сделать, непросто выполнимо из-за того, как анимации обрабатываются в jQuery.
Поскольку анимация управляется очередью, невозможно запускать параллельные анимации на один и тот же элемент, не будучи в одной и той же функции.
То есть,
$(element).animate(aThing, aTime);
.animate(anotherThing, anotherTime);
не собирается работать параллельно. aThing завершится в ATIME, а затем anotherThing продолжительностью anotherTime.
Таким образом, вы можете выполнить только несколько изменений, имея их в одной и той же функции:
$(element).animate({aThing: aValue, anotherThing: anotherValue}, aTime);
Вот краткое объяснение анатомии, как анимационные функции обрабатываются в JQuery.
Объект таймера присваивается элементу для продолжительности анимации:
function t(gotoEnd) {
return self.step(gotoEnd);
}
t.elem = this.elem;
jQuery.timers.push(t);
При вызове функции останова, он удаляет таймер из таймеров:
// go in reverse order so anything added to the queue during the loop is ignored
for (var i = timers.length - 1; i >= 0; i--) {
if (timers[i].elem === this) {
if (gotoEnd) {
// force the next step to be the last
timers[i](true);
}
timers.splice(i, 1);
}
}
Итак, это не способ удалить определенное свойство функции анимации, так как сам таймер убит.
Единственный способ, которым я мог думать о выполнении этого было бы следить за временем начала и продолжительность, повторно enqueuing анимации и остановить текущую.
var start = $.now();
var duration = 5000;
$(element).animate({opacity: '0.5', width: '500px'}, duration);
...
var remaining = duration - ($.now() - start);
$(element).animate({opacity: '0.5', remaining)
.stop();
я бы подумал, что будет путь, используя пользовательские именованные очереди, но это не похоже на '.stop()' метод может предназначаться для конкретной очереди (насколько я могу расскажите в любом случае). – user113716
На данный момент я сделал запрос на добавление этой функции http://bugs.jquery.com/ticket/8227 – slifty
Каковы критерии остановки анимации? Это основано на действии пользователя? – Jeff