Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/03/2011, 07:48
Avatar de _cronos2
_cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 11 meses
Puntos: 310
Transición que no funciona

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 original
  1. Object.prototype.clonar = function(){
  2.  var clon = {};
  3.  clon.prototype = this.prototype;
  4.  for(var i in this){
  5.   clon[i] = this[i];
  6.  }
  7.  return clon;
  8. };
  9.  
  10. Object.prototype.calcar = function(obj){
  11.  var clon = {};
  12.  clon.prototype = this.prototype;
  13.  for(var i in this){
  14.   clon[i] = this[i];
  15.  }
  16.  for(var i in obj){
  17.   clon[i] = obj[i];
  18.  }
  19.  return clon;
  20. };
  21.  
  22. JSPlus.Fx = {};
  23.  
  24. JSPlus.Fx.Efectos = {}
  25. /* Aquí están todas las funciones,
  26. *  no las pongo porque es muy largo
  27. */
  28.  
  29. JSPlus.Fx.porDefecto = {
  30.  'Opciones' : {
  31.   'duracion' : 1000,
  32.   'curva' : 'lineal',
  33.   'intervalo' : 20,
  34.   'unidad' : 'px'
  35.  }
  36. };
  37.  
  38. JSPlus.Fx.Transicion = function(obj, opc){
  39.  var este = this;
  40.  this.fin = 0;
  41.  this.start = new Date().getTime();
  42.  this.inicio = function(){
  43.   setTimeout(function(){
  44.    var step = este.paso();
  45.    if(!step){
  46.     obj.fn(1);
  47.     este.fin = 1;
  48.     window.globalIntervalo = 0;
  49.     return;
  50.    }
  51.    obj.fn(step);
  52.    este.inicio();
  53.   }, opc.intervalo);
  54.  };
  55.  this.paso = function(){
  56.   var now = new Date().getTime();
  57.   return (now - this.start < opc.duracion) && opc.curva(now - this.start);
  58.  };
  59. }
  60.  
  61. JSPlus.metodos({
  62.  'FX' : function(objeto, opciones){
  63.   var fx = JSPlus.Fx, este = P(this);
  64.   for(var i in objeto){ // tipo [desde, hasta]
  65.    var prop = objeto[i];
  66.    if(!/(string|number)/i.test(typeof prop)) continue; // !(function, array, object, ...)
  67.    objeto[i] = [este.getStyle(i), prop]; // [desde[ahora], hasta]
  68.   };
  69.   var obj = objeto.clonar(), opc = (opciones || {}).calcar(fx.porDefecto.Opciones); // setea sólo si no se declaran
  70.   if(typeof opc.curva === 'array'){ // parche -> lineal(p), reboteG(n)(p)
  71.    opc.curva = fx.Efectos[opc.curva[0]](opc.curva[1]);
  72.   }else{
  73.    opc.curva = fx.Efectos[opc.curva];
  74.   }
  75.   obj.fn = function(p){ // paso
  76.    for(var i in obj){
  77.     act = obj[i];
  78.     if(!/array/i.test(typeof act)) continue; // sólo arrays
  79.     var ini = parseFloat(act[0]), fin = parseFloat(act[1]);
  80.     var difer = Math.abs(ini - fin), prop = i.toLowerCase();
  81.     var dvlp = (ini + p * difer) + ((act[1].toString().match(/[A-z]+$/) || [])[0] || opc.unidad); // si hay unidad declarada se usa esa
  82.     console.log(dvlp); // Esto no llega a mostrarse
  83.     este.css('position', 'absolute').css(prop, dvlp);
  84.     if(prop == 'opacity'){ este.opacity(ini + p * difer); } // si es opacity no lleva unidad
  85.    }
  86.   };
  87.   JSPlus.escribir(obj); // console.log
  88.   var trans = new JSPlus.Fx.Transicion(obj, opc);
  89.   trans.inicio();
  90.   trans = null;
  91.   return P(this);
  92.  }
  93. });
Y lo llamo así:
Código Javascript:
Ver original
  1. P('#ejemplo').FX({
  2.  'left' : 100,
  3.  'width' : '500px',
  4.  opacity : 0.5,
  5. }, {
  6.  'duracion' : 1000,
  7.  'curva' :  ['reboteG', 3]
  8. });
Saludos y gracias :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red