Сделать скрипт jquery 1.5.2 совместимым с функцией when - PullRequest
0 голосов
/ 19 декабря 2011

Мне нужно превратить эту функцию

$.when(
    self.image.fadeOut(self.options.animationSpeed),
    self.aniImg.eq(0).fadeIn(self.options.animationSpeed)
).done(function () {
    self.finishAnimating(data);
});

в функцию, совместимую с jquery 1.5.

Я пытался, но не могу заставить ее работать.Может ли кто-нибудь помочь мне, пожалуйста?

@ Редактировать: я сделал настройку здесь http://jsfiddle.net/u4hWf/. Как вы можете видеть, с jquery 1.5.2 происходят странные визуальные вещи, которые не с jquery 1.6.xЕсли бы кто-то мог взглянуть, это было бы замечательно

1 Ответ

2 голосов
/ 20 декабря 2011

Вы не собираетесь делать ничего более красивого, чем код с отложенным стилем. Я настоятельно призываю вас взглянуть на обновление версии jQuery.

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

self.image.fadeOut(self.options.animationSpeed);
self.aniImg.eq(0).fadeIn(self.options.animationSpeed);
setTimeout(function() {
    self.finishAnimating(data);
}, self.options.animationSpeed);

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

var ticks = 0;

function tick() {
    if (++ticks === 2) { // number of animations
        self.finishAnimating(data);
    }
}

self.image.fadeOut(self.options.animationSpeed, tick);
self.aniImg.eq(0).fadeIn(self.options.animationSpeed, tick);

Это более многословно, и опять же не очень красиво, но оно более точно повторяет поведение $.when и является более расширяемым.

...