Foros del Web » Programando para Internet » Javascript »

[Función] move() 1.0 (?) - ¿Me ayudas a mejorarla? xD

Estas en el tema de [Función] move() 1.0 (?) - ¿Me ayudas a mejorarla? xD en el foro de Javascript en Foros del Web. Versión 1.0 (?). Bueno, hice una linda función que lo que hace es mover gradualmente, primero rápido y despues mas lento, cualquier div a la ...
  #1 (permalink)  
Antiguo 02/09/2009, 14:08
 
Fecha de Ingreso: mayo-2008
Ubicación: En la guarida del mal, tratando de conquistar el mundo
Mensajes: 174
Antigüedad: 15 años, 10 meses
Puntos: 2
De acuerdo [Función] move() 1.0 (?) - ¿Me ayudas a mejorarla? xD

Versión 1.0 (?).

Bueno, hice una linda función que lo que hace es mover gradualmente, primero rápido y despues mas lento, cualquier div a la que se la asignemos xP.

Se le puede aplicar a una div, con cualquier evento, o podes ponerlo dentro de un tag <script> para que carge "onLoad":

Código PHP:
<html>
    <
head>
        <
title>Prueba JS</title>
        <
script language="JavaScript">
            function 
move(objxya//Objeto, coordenada X de destino, coordenada Y de destino y la aceleración, mientras mas alta la aceleración, mas despacio va, no tiene mucho sentido pero bue xD. 
            
{    
                if(!
obj.moving//Esto es para que cuando llames a la función desde un mismo elemento 2 veces, no la cargue a menos que haya terminado de moverse.
                
{
                    
obj.sumat=sum(a); //Esta función que hice es para sacar la sumatoria de un número, lo hago para despues calcular la aceleración.
                    
if(x!==false//Esto es para que si pones valor falso en la coordenada de destino, no mueva el objeto.
                    
{
                        
obj.distX=parseFloat(obj.style.left) - x//Aca le saco el "px" a left y despues le resto las coordenadas de destino para calcular la trayectoria a recorrer.
                        
obj.floatX=parseInt(obj.style.left); //Aca igualo por única vez floatX a style.left porque en IE style.left no puede tomar valores float, y luego hay diferencias en el trayecto recorrido.
                    
}
                    if(
y!==false//Lo mismo que con X pero con Y.
                    
{
                        
obj.distY=parseFloat(obj.style.top) - y//Idem.
                        
obj.floatY=parseInt(obj.style.top); //Idem xD.
                    
}

                    function 
loop() //Esta es la función loop que voy a llamar desde el setInterval, la pongo dentro de la función move para que pueda usar sus variables.
                    
{
                        if(
x!==false//Lo mismo que arriba, si desactivaron X se saltea este paso.
                        
{
                            
obj.floatX=obj.floatX-(obj.distX/obj.sumat)*a//Aca calculo el aumento de distancia y se lo agrego a "floatX".
                            
obj.style.left=obj.floatX+"px"//Luego igualo style.left a floatX. Todo para correjir el puto bug de IE xDD.
                        
}
                        if(
y!==false//Idem que con X.
                        
{
                            
obj.floatY=obj.floatY-(obj.distY/obj.sumat)*a//Idem.
                            
obj.style.top=obj.floatY+"px"//Idem.
                        
}
                
                        
a--; //Disminuyo "a" para que aumente la distancia cada vez mas despacio.
                        
if(a<=0//Cuando "a" llega a 0, es decir, que ya recorrió todo lo que debia recorrer.
                        
{
                            
clearInterval(obj.intervalID); //Desactivo el intervalo.
                            
obj.moving=false//Escribo que el elemento ya no se está moviendo.
                        
}
                    }

                    
obj.intervalID=setInterval(loop,33); //Inicio un intervalo cada 33 milisengudos de la función loop.
                    
obj.moving=true//Escribo que el elemento se está moviendo.
                
}
            }


            function 
sum(num)
            {
                var 
result=0;
                for(
i=1;i<=num;i++) result+=i//No hay que explicar demasido, saca la sumatoria de un número xD.
                
return result;
            }

            
/* La regla en la que me baso para calcular la distancia que tiene que recorrer es:
            (600/(5+4+3+2+1))*5  +  (600/(5+4+3+2+1))*4  +  (600/(5+4+3+2+1))*3  +  (600/(5+4+3+2+1))*2  +  (600/(5+4+3+2+1))*1  = 600
            La uso en la escuela para contabilidad para calcular las amortizaciones decrecientes o crecientes xDDDDDDDDDD. */
        
</script>
    </head>

    <body style="margin:0px;padding:0px;">
        <div id="lol" style="width:100px;height:100px;position:absolute;left:0px;top:0px;background-color:#000;"></div>
        <div id="lol2" style="width:100px;height:100px;position:absolute;left:0px;top:110px;background-color:#000;" onMouseOver="move(this, 400, 400, 30)"></div>
        <div id="lol3" style="width:100px;height:100px;position:absolute;left:0px;top:210px;background-color:#000;" onMouseOver="move(this, 800, 600, 30)"></div>
        <div id="lol4" style="width:100px;height:100px;position:absolute;left:0px;top:310px;background-color:#000;" onMouseOver="move(this, 300, 800, 30)"></div>
        <div id="lol5" style="width:100px;height:100px;position:absolute;left:0px;top:410px;background-color:#000;" onMouseOver="move(this, 1000, 100, 30)"></div>
        <div id="lol6" style="width:100px;height:100px;position:absolute;left:0px;top:510px;background-color:#000;" onMouseOver="move(this, 500, 0, 30)"></div>
    </body>
    <script language="JavaScript">
        move(document.getElementById("lol"), 900, 300, 30);
    </script>
</html> 
a=aceleración // Mientras alto mas lento va xD.
x=coordenada X
y=coordenada Y
obj=el div al que le quieres aplicar la función

Prueben el texto que está aca, funciona y queda bonito =D
Al menos en Firefox xD
Cuando descubra como correr IE en Ubuntu lo pruebo xDDD.
EDITO: Acabo de lograr poner IE en Ubuntu, ni yo me lo creo, funcionó a la primera!!! =D
EDITO: Me acabo de dar cuenta que no toma hojas de estilo externas, cuando logre descubrir como hacerlo edito el post xDD.
EDITO: Ya la modifiqué, anda perfecto en IE, tenia algunos bugs, y en Firefox. Y ahora está comentada xDDD.

Última edición por ZequeZ; 02/09/2009 a las 15:58 Razón: Editaciones (?)
  #2 (permalink)  
Antiguo 03/09/2009, 01:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: [Función] move() 1.0 (?) - ¿Me ayudas a mejorarla? xD

Interesante.... grácias, me la mirare.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:37.