Foros del Web » Programando para Internet » Javascript »

Ayuda con funcion para hacer vibrar un div

Estas en el tema de Ayuda con funcion para hacer vibrar un div en el foro de Javascript en Foros del Web. Hola, estoy haciendo un script para hacer vibrar un div. Este es el codigo: HTML: Código HTML: <div id= "box" > </div> <input type= "button" ...
  #1 (permalink)  
Antiguo 10/12/2010, 10:21
Avatar de Tecktonikrazy  
Fecha de Ingreso: enero-2010
Mensajes: 224
Antigüedad: 14 años, 4 meses
Puntos: 3
Pregunta Ayuda con funcion para hacer vibrar un div

Hola, estoy haciendo un script para hacer vibrar un div. Este es el codigo:

HTML:

Código HTML:
<div id="box"></div>

<input type="button" value="Zumbido" onclick="buzz()"> 
CSS:

Código CSS:
Ver original
  1. #box{
  2. position: relative;
  3. top: 0;
  4. left: 0;
  5. width: 100px;
  6. height: 100px;
  7. background: #AAAAAA;
  8. border: 1px solid #777777;
  9. -moz-border-radius: 5px;
  10. -webkit-border-radius: 5px;
  11. }

JAVASCRIPT:


Código Javascript:
Ver original
  1. var buzzed = document.getElementById('box');
  2.  
  3. function buzz(){
  4.  
  5. buzzed.style.top = 5;
  6.  
  7. setTimeout("buzzed.style.left = 5;",50);
  8.  
  9. setTimeout("buzzed.style.bottom = 5;",50);
  10.  
  11. setTimeout("buzzed.style.right = 5;",50);
  12.  
  13. setTimeout("buzzed.style.top = 5;",50);
  14.  
  15. setTimeout("buzzed.style.left = 5;",50);
  16.  
  17. setTimeout("buzzed.style.bottom = 5;",50);
  18.  
  19. setTimeout("buzzed.style.right = 5;",50);
  20. }


Lo que hace la funcion buzz() es cambiar el valor de la propiedad css "top" a 5, de "left" a 5 y asi continuamente 2 veces, dando el efecto de que el div "box" esta vibrando, pero no me funciona, lo unico que pasa al dar click en el boton es que solo se mueve 5 pixeles hacia abajo y 5 hacia la derecha y nada mas, ahi se queda, cual es el problema? o de que otra forma puedo hacer esta funcion?
__________________
I LOVE HTML (How To Make Love)
  #2 (permalink)  
Antiguo 10/12/2010, 18:39
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Ayuda con funcion para hacer vibrar un div

es normal que solo vea el desplazamiento de 5 pixeles o incluso ninguno según sea el navegador. notese que siempre le estas dando el mismo valor a las propiedades left, right, top y bottom. además que las funciones setTimeout se interpretan todas al mismo tiempo. en la forma mas básica tienes que invocar una función de forma recursiva con un delay. la función asigna los valores a las propiedades (left|right|top|bottom) y el delay (setTimeout) invoca la misma función.

si quieres tener una mejor idea, busca por "temblar ventanas" (javascript shaking window), este tipo de script ha existido desde el boom de dhtml.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 11/12/2010, 02:06
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
Respuesta: Ayuda con funcion para hacer vibrar un div

loading...............


Lo que pasa es que no estas respetando el orden de ejecución de las funciones.


Código PHP:
setTimeout("buzzed.style.left = 5;",50);
setTimeout("buzzed.style.bottom = 5;",50);
setTimeout("buzzed.style.right = 5;",50);
setTimeout("buzzed.style.top = 5;",50);
setTimeout("buzzed.style.left = 5;",50);
setTimeout("buzzed.style.bottom = 5;",50);
setTimeout("buzzed.style.right = 5;",50); 
NO, está mal, lo que deberias hacer es:


Código PHP:
setTimeout(function(){
  
buzzed.style.left 5;
  
setTimeout(function(){
       
buzzed.style.bottom 5;
       
//aca el siguiente movimiento
   
},50);
},
50); 
de esta forma tendrás un orden en la ejecución del efecto de zumbido, caso contrario TODO ocurrirá en una sola pasada y no habrá zumbido ni nada...


Saludos.


connection closed.
__________________

Maborak Technologies

Etiquetas: funcion
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 05:07.