Buenas,
A ver, estas sobreecribiendo, obj.fn, en cada iteracion y el tiempo que le estas asignando al timeout es muy bajo, un posible parche:
Código Javascript
:
Ver originalJSPlus.metodos({
'gradiente' : function(objeto) {
var este = this, padre = JSPlus.Gradiente;
var colores = objeto.colores;
if(colores.constructor === Array) {
objeto.duracion /= colores.length;
for(var i = 1; sig = colores[i]; ++i) {
var obj = {}
for(var p in padre.porDefecto) {
obj[p] = objeto[p] || padre.porDefecto[p];
}
var act = colores[i - 1];
obj.fn = function(I, F) {
return function(p) {
var cAct = padre.separarColor(I);
var difer = padre.calcularDiferencia(I, F);
var objC = padre.crearObjetoColor(
parseInt(cAct.R) + difer.R * p,
parseInt(cAct.G) + difer.G * p,
parseInt(cAct.B) + difer.B * p
);
este.css(obj.prop, padre.RGBValido(objC));
};
}(act, sig);
var func = function() {
este.gradienteEnCurso = 1;
var trans = new JSPlus.Gradiente.Transicion(obj, este);
trans.inicio();
};
if(este.gradienteEnCurso == 1) {
return setTimeout(function(){ func(); }, 3400);
}
func();
}
}
return este;
}
});
Esto tiene dos fallos grandes, el primero hace el merge dentro del loop, para solucionar esto deberías cambiar la implementacion de JSPlus.Gradiente.Transicion y separar el callback de las propiedades, el otro es setear un timeout para comprobar si el efecto se esta ejecutando, deberias implementar tu clase de eventos y poder asignarle custom events a tus clases, algo esencial para manejar efectos y colas de efectos, deberías poder hacer algo así:
Código Javascript
:
Ver originalnew JSPlus.Gradiente.Transicion(el, {
onStart: function(){...},
onStep: function(){},
onComplete: function(){...}
});
Te dejo un par de referencias:
http://www.nczonline.net/blog/2010/0...in-javascript/ http://www.geekdaily.net/2008/04/02/...custom-events/
Saludos.