Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/12/2014, 04:17
Hachector
 
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