Por fin! Después de algo más de 3 meses, he conseguido que funcione! Como imaginaba, era un problema de llamar repetidamente a la función gradiente. Más concretamente, era problema de los parámetros. Se ejecutaba el primer gradiente bien, pero los otros al almacenarse en la cola, debían esperar. Mientrar esperaban, se generaba toda la cola, así que al llamar al siguiente paso de la cola, los parámetros objeto y opciones se habían quedado con el último valor que habían tenido, ya que como son objetos se pasan por referencia.
La solución es sencilla, clonar los objetos por cada iteración. O sea que así queda el código:
Código Javascript
:
Ver originalvar clonar = function(obj){
var clon = {};
for(var prop in obj){
if(obj.hasOwnProperty(prop)){
clon[prop] = (function(este){
if(este[prop] instanceof Array){
return este[prop].concat();
}else if(typeof este[prop] == 'object'){
return este[prop].esElemento() || este[prop] === null ? este[prop] : este[prop].clonar();
}
return este[prop];
})(obj);
}
}
return clon;
};
for(var i = 0, len = claves.length; i < len - 1; i++){
var objeto = clonar(obj), opciones = clonar(opc);
objeto.colores = coloresArr.slice(i, i + 2);
opciones.duracion = opc.duracion * (parseInt(claves[i + 1].lastSubstr(1)) - parseInt(claves[i].lastSubstr(1))) / 100;
este.gradiente(objeto, opciones);
}
Muchas gracias a @musterpuppet por haberme sufrido todo este tiempo, y perdón por ser tan duro de mollera y no entender tus explicaciones
De momento no puedo poner un enlace al código porque al subirlo al hosting no me lo actualiza, problemas con la caché supongo, pero en cuanto pueda edito.
Saludos y gracias de nuevo :D