Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/02/2011, 16:03
Avatar de _cronos2
_cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Problema con timing (entre otros)

Hola gente, sigo con problemas con 'mi librería'. Hasta ahora me funcionaba bien, pero he realizado cambios en una función para que ocupe menos (y sea más legible y preciso) y... ya no funciona. Primero pongo el código y luego el problema:
Código Javascript:
Ver original
  1. // ...
  2.   getStyle : function(style){
  3.    var computedStyle;
  4.    if (typeof this.currentStyle != 'undefined')
  5.     computedStyle = this.currentStyle;
  6.    else
  7.     computedStyle = document.defaultView.getComputedStyle(this, null);
  8.   return computedStyle[style];
  9.   },
  10.  opacity : function(){
  11.    var isIE = document.all, estilos = isIE ? ['filter', 100] : ['opacity', 1], valor = isIE ? ['alpha(opacity=', ')'] : ['', ''];
  12.    if(arguments.length)
  13.     this.style[estilos[0]] = valor[0] + (arguments[0] * estilos[1]) + valor[1];
  14.    else
  15.     return P(this).getStyle('opacity');
  16.    return 1;
  17.   },
  18.   entrada : function(t){
  19.    var tempo = { 'lento' : 800, 'medio' : 500, 'rapido' : 200};
  20.    var tiempo = isFinite(t)?t:tempo[t], thix = P(this), incr = 20/tiempo;
  21.    thix.opacity(0);
  22.    var timer = setInterval(function(){
  23.     if(thix.opacity()>=1) timer = clearInterval(timer);
  24.     else{
  25.      thix.opacity(thix.opacity()+incr);
  26.     }
  27.    }, 20);
  28.    return P(this);
  29.   },
  30.   salida : function(t){
  31.    var tempo = { 'lento' : 800, 'medio' : 500, 'rapido' : 200};
  32.    var tiempo = isFinite(t)?t:tempo[t], thix = P(this), incr = 20/tiempo;
  33.    thix.opacity(1);
  34.    var timer = setInterval(function(){
  35.     if(thix.opacity()<=0) timer = clearInterval(timer);
  36.     else{
  37.      thix.opacity(thix.opacity()-incr);
  38.     }
  39.    }, 20);
  40.    return P(this);
  41.   },
  42. // ...
Hasta ahora, la función opacity era así:
Código Javascript:
Ver original
  1. opacity : function(){
  2.    var isIE = document.all, estilos = isIE ? ['filter', 100] : ['opacity', 1], valor = isIE ? ['alpha(opacity=', ')'] : ['', ''];
  3.    if(arguments.length){
  4.     this.style[estilos[0]] = valor[0] + (arguments[0] * estilos[1]) + valor[1];
  5.    }else{
  6.     if(this.style[estilos[0]]){
  7.      return this.style[estilos[0]].match(/\d+(\.\d+)?/)[0]/estilos[1];
  8.     }else{
  9.      if(SS.find(this.tagName, estilos[0])){
  10.       return SS.find(this.tagName, estilos[0]).match(/\d+(\.\d+)?/)[0]/estilos[1];
  11.      }else{
  12.       if(SS.find('#'+this.id, estilos[0]))
  13.        return SS.find('#'+this.id, estilos[0]).match(/\d+(\.\d+)?/)[0]/estilos[1];
  14.       else{
  15.        for(var i=0, partir=this.className.split(' '); clase=partir[i]; i++){
  16.         if(SS.find('.'+clase, estilos[0]))
  17.          return SS.find('.'+clase, estilos[0]).match(/\d+(\.\d+)?/)[0]/estilos[1];
  18.        }
  19.       }
  20.      }
  21.     }
  22.     return 1;
  23.    }
  24.   },
Problemas:
En Chrome tengo un problema con el timing, porque la primera vez se ejecuta bien, pero a partir de ahí va cada vez más rápido; y además la función entrada no funciona (se queda con opacity:0 . Sólo funciona salida()). En IE directamente no funcionan ni una ni otra. ¿Qué está pasando? ¿Tanto me cambia el código la función nueva?
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

Última edición por _cronos2; 09/02/2011 a las 12:39