Código Javascript:
Y lo llamo así:Ver original
Object.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); } });
Código Javascript:
Saludos y gracias :D Ver original
P('#ejemplo').FX({ 'left' : 100, 'width' : '500px', opacity : 0.5, }, { 'duracion' : 1000, 'curva' : ['reboteG', 3] });