Мне очень нравится ответ, опубликованный Тимом, хотя мне нужно было, чтобы это исправление работало в производственной среде Drupal 6.
У меня установлен jQuery 1.3.2 с помощью модуля обновления jQuery, поэтому есть несколько отличий между тем, что я использую, и jQuery 1.4, для которого разработано исправление Тима.
Следуя инструкциям Тима, я получил 90% пути, мне просто пришлось надеть свою мысленную шапку на 10 минут, чтобы вместо этого придумать этот код ..
Значения таймера 25 - 33, по-видимому, работают намного лучше, чем 13 мс для анимаций со средней скоростью, таких как затухание фоновых изображений.
var timerId;
function now() {
return (new Date).getTime();
}
jQuery.fx.prototype.custom = function( from, to, unit ) {
this.startTime = now();
this.start = from;
this.end = to;
this.unit = unit || this.unit || "px";
this.now = this.start;
this.pos = this.state = 0;
var self = this;
function t( gotoEnd ) {
return self.step(gotoEnd);
}
t.elem = this.elem;
if ( t() && jQuery.timers.push(t) && !timerId ) {
timerId = setInterval(function(){
var timers = jQuery.timers;
for ( var i = 0; i < timers.length; i++ )
if ( !timers[i]() )
timers.splice(i--, 1);
if ( !timers.length ) {
clearInterval( timerId );
timerId = undefined;
}
}, 25);
}
};