Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Parar funcion .animate() durante X segundos en jquery

Estas en el tema de Parar funcion .animate() durante X segundos en jquery en el foro de Jquery en Foros del Web. ¡Buenas a todos! Primero de todo, soy nuevo por aquí, así que pido disculpas si me sale el post rarillo o no se poner bien ...
  #1 (permalink)  
Antiguo 23/12/2014, 04:17
 
Fecha de Ingreso: diciembre-2014
Mensajes: 5
Antigüedad: 9 años, 11 meses
Puntos: 0
Pregunta Parar funcion .animate() durante X segundos en jquery

¡Buenas a todos!

Primero de todo, soy nuevo por aquí, así que pido disculpas si me sale el post rarillo o no se poner bien el tema del código y esas cosas (es mi primerito día xD)

Estoy haciendo unas cuantas probaturas con Javascript y Jquery, entre ellas tener un DIV con una imagen dentro, que se mueva aleatoriamente dentro de otro DIV mayor.

Hasta ahí, todo perfecto, además le hago un "mirror" cambiandole el CSS a la imagen para que si va hacia la derecha, apunte a la derecha, y si va a la izquierda, pues izquierda. Pero ahora me asalta la duda de si se podría o no hacer que, cuando llegue a una posición, y antes de moverse hacia otra, cambie la url de la imagen por otra, y se mantenga en esa posicíon durante un par de segundos, quieta.

He intentado meterle un .delay(), .setTimeOut() y .setInterval() sin demasiado exito (no se si no se puede, o soy un poco cafre xD)

Pongo (o intento poner) el código Javascript:

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.             //usamos la funcion de la libreria backstretch para poner una imagen de fondo adaptable
  3.              $.backstretch("./bg.jpg");
  4.        
  5.             //hacemos un for, y llamamos a la funcion tantas veces como
  6.             //divs a animar tengamos
  7.             var i =0;
  8.             for(i=0;i<2;i++){
  9.                 var id = "flecha"+i;
  10.                 var element = document.getElementById(id);
  11.                 fAnimate(element);
  12.             }
  13.         });
  14.        
  15.        
  16.         //funcion para animar un div y que se mueva por la pantalla, pero dentro de otro div
  17.         function fAnimate(element){
  18.             //primero, obtenemos una nueva posicion dentro del div principal
  19.             //Llamamos a funcion que devolvera el nodo padre
  20.             var father = selpadre(element);
  21.             //Cogemos la siguiente posicion del div
  22.             var newpos = fNewPosition(father);
  23.            
  24.             //ahora, sacamos la posicion anterior del div que queremos mover
  25.             var tcube = $(father);
  26.             var oldpos = tcube.position();  
  27.  
  28.             //llamamos a la función que calcula la velocidad de la animacion
  29.             var velocidad = fCalcSpeed([oldpos.top, oldpos.left], newpos);
  30.            
  31.             //IF que va a mirar hacia donde se mueve, y va a "reflejar" la imagen para que mire hacia ese lado.
  32.             if(oldpos.left >= newpos[1]){
  33.                 //va a la derecha
  34.                 $(element).css({"-moz-transform":"scale(1, 1)","-webkit-transform":"scale(1, 1)","transform":"scale(1, 1)"});
  35.             } else {
  36.                 //va a la izquierda
  37.                 $(element).css({"-moz-transform":"scale(-1, 1)","-webkit-transform":"scale(-1, 1)","transform":"scale(-1, 1)"});
  38.             }
  39.  
  40.             //tenemos las posiciones nuevas y viejas, tenemos la velocidad,
  41.             //solo queda llamar a la funcion de animar y que se mueva.
  42.             $(father).animate({ top: newpos[0], left: newpos[1]}, velocidad, function(){   
  43.                 fAnimate(element);        
  44.             });
  45.         }
  46.  
  47.        
  48.         //funcion que devuelve una posicion aleatoria dentro del div principal
  49.         function fNewPosition(element){
  50.             //sacamos la posicion del div principal
  51.             var divprin = $("#principal");
  52.             var divcuad = $(element);
  53.             //obtenemos unos valores X e Y aleatorios que esten dentro del div principal
  54.             /*hay que restar al div principal el ancho y largo del div chiquitin, para que no se salga fuera del grande.*/
  55.             var randomX = Math.floor(Math.random() * (( divprin.width()-divcuad.width() )+1));
  56.             var randomY = Math.floor(Math.random() * (( divprin.height()-divcuad.height() )+1)););             
  57.            
  58.             //devolvemos los valores en forma de array
  59.             return [randomY, randomX];
  60.         }
  61.        
  62.        
  63.         //funcion que calcula la velocidad a partir de sus dos posiciones
  64.         function fCalcSpeed(oldpos, newpos) {  
  65.             var x = Math.abs(oldpos[1] - newpos[1]);
  66.             var y = Math.abs(oldpos[0] - newpos[0]);
  67.            
  68.             var testea = x > y ? x : y;
  69.             var modificador = 0.1;
  70.  
  71.             var speed = Math.ceil(testea/modificador);
  72.             return speed;
  73.         }
  74.            
  75.        
  76.         //funcion que recibe un elemento y devuelve el elemento padre
  77.         function selpadre (elemento){
  78.             var pid=elemento.parentNode;   
  79.             return pid;
  80.         }


El HTML no tiene mucho, un DIV grande, otro DIV dentro, y una imagen dentro más
  #2 (permalink)  
Antiguo 23/12/2014, 16:05
(Desactivado)
 
Fecha de Ingreso: enero-2013
Mensajes: 289
Antigüedad: 11 años, 9 meses
Puntos: 10
Respuesta: Parar funcion .animate() durante X segundos en jquery

http://api.jquery.com/stop/
  #3 (permalink)  
Antiguo 30/12/2014, 01:48
 
Fecha de Ingreso: diciembre-2014
Mensajes: 5
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Parar funcion .animate() durante X segundos en jquery

Gracias mogin por tu explicación detallada con claros ejemplos y gran retórica...

No, en serio, en realiad sí que me ha ayudado, gracias xD

Por si luego alguien entra y le interesa, efectivamente con la funcion .stop() que ha puesto moginn se puede parar la animación, pero para hacer lo que yo quería, hay que ponerla dentro de la función .animate(), seguido por un setTimeout() que vuelva a llamar a la funcion principal (en este caso, fAnimate() ) para hacerla recursiva.

Finalmente, el código me ha quedado tal que así:

Código Javascript:
Ver original
  1. $(father).animate({ top: newpos[0], left: newpos[1]}, velocidad, function(){   
  2.         $(father).stop();
  3.         setTimeout(function(){ fAnimate(element); },1000);                 
  4.     });

Etiquetas: divs, javascript
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 04:10.