Bueno amigos pues aquí ando, intentando hacer una función para transiciones. Resulta que el otro día me topé con
este (excelente) artículo de
@Panino y me di cuenta de que lo estaba haciendo mal, así que me puse a adaptar su código a lo que necesitaba... pero no funcionó

Antes por lo menos la consola de errores me marcaba los errores, valga la redundancia, pero ahora ni eso, simplemente no funciona. Dejo el código a ver si me podéis ayudar XD
Código Javascript
:
Ver originalObject.prototype.clonar = function(){
var clon = {};
clon.prototype = this.prototype;
for(var i in this){
clon[i] = this[i];
}
return clon;
};
Object.prototype.calcar = function(obj){
var clon = {};
clon.prototype = this.prototype;
for(var i in this){
clon[i] = this[i];
}
for(var i in obj){
clon[i] = obj[i];
}
return clon;
};
JSPlus.Fx = {};
JSPlus.Fx.Efectos = {}
/* Aquí están todas las funciones,
* no las pongo porque es muy largo
*/
JSPlus.Fx.porDefecto = {
'Opciones' : {
'duracion' : 1000,
'curva' : 'lineal',
'intervalo' : 20,
'unidad' : 'px'
}
};
JSPlus.Fx.Transicion = function(obj, opc){
var este = this;
this.fin = 0;
this.start = new Date().getTime();
this.inicio = function(){
setTimeout(function(){
var step = este.paso();
if(!step){
obj.fn(1);
este.fin = 1;
window.globalIntervalo = 0;
return;
}
obj.fn(step);
este.inicio();
}, opc.intervalo);
};
this.paso = function(){
var now = new Date().getTime();
return (now - this.start < opc.duracion) && opc.curva(now - this.start);
};
}
JSPlus.metodos({
'FX' : function(objeto, opciones){
var fx = JSPlus.Fx, este = P(this);
for(var i in objeto){ // tipo [desde, hasta]
var prop = objeto[i];
if(!/(string|number)/i.test(typeof prop)) continue; // !(function, array, object, ...)
objeto[i] = [este.getStyle(i), prop]; // [desde[ahora], hasta]
};
var obj = objeto.clonar(), opc = (opciones || {}).calcar(fx.porDefecto.Opciones); // setea sólo si no se declaran
if(typeof opc.curva === 'array'){ // parche -> lineal(p), reboteG(n)(p)
opc.curva = fx.Efectos[opc.curva[0]](opc.curva[1]);
}else{
opc.curva = fx.Efectos[opc.curva];
}
obj.fn = function(p){ // paso
for(var i in obj){
act = obj[i];
if(!/array/i.test(typeof act)) continue; // sólo arrays
var ini = parseFloat(act[0]), fin = parseFloat(act[1]);
var difer = Math.abs(ini - fin), prop = i.toLowerCase();
var dvlp = (ini + p * difer) + ((act[1].toString().match(/[A-z]+$/) || [])[0] || opc.unidad); // si hay unidad declarada se usa esa
console.log(dvlp); // Esto no llega a mostrarse
este.css('position', 'absolute').css(prop, dvlp);
if(prop == 'opacity'){ este.opacity(ini + p * difer); } // si es opacity no lleva unidad
}
};
JSPlus.escribir(obj); // console.log
var trans = new JSPlus.Fx.Transicion(obj, opc);
trans.inicio();
trans = null;
return P(this);
}
});
Y lo llamo así:
Código Javascript
:
Ver originalP('#ejemplo').FX({
'left' : 100,
'width' : '500px',
opacity : 0.5,
}, {
'duracion' : 1000,
'curva' : ['reboteG', 3]
});
Saludos y gracias :D