Cómo agregar pausa entre cada iteración de jQuery.cada()?


Estoy agarrando una matriz de objetos jQuery y luego a través.cada () modificando cada jquery individual con en la matriz.

En este caso he actualizado los nombres de las clases para activar una propiedad-webkit-transition-para utilizar una transición css.

Me gustaría que hubiera una pausa antes de que comience cada transición css. Estoy usando lo siguiente, pero no hay retraso entre cada actualización. En cambio, todos parecen estar actualizándose a la vez.

function positionCards() {
  $cards = $('#gameboard .card');
  $cards.each(function() {
      setTimeout( function(){ addPositioningClass($(this)); }, 500 )
  });
}

function addPositioningClasses($card){
  $card
    .addClass('position')
}

Esperaba que setTimeout resolviera esto, pero no parece estar funcionando. ¿Hay alguna manera de realizar la pausa antes de cada actualización del nombre de CLASE de cada objeto?

Author: DA., 2011-03-05

8 answers

Agregué esto como un comentario, pero ahora que lo he leído correctamente y he respondido a mi propia pregunta, esto probablemente funcionaría:

function positionCards() {
  var $cards = $('#gameboard .card');

  var time = 500;

  $cards.each(function() {
      setTimeout( function(){ addPositioningClass($(this)); }, time)
      time += 500;
  });
}
 80
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-22 05:46:15

Lamento desenterrar un hilo viejo (y por mi mal inglés), pero este consejo podría ser útil para otros casos similares:

$cards.each(function(index) {
    $(this).delay(500*index).addClass('position');
});
 47
Author: johnjohn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-16 12:44:23

Si haces un método que se llama a sí mismo cada 500 ms que debe hacer ese truco. El siguiente código debería funcionar.

var __OBJECTS = [];

$('#gameboard .card').each(function() {
    __OBJECTS.push($(this));
});

addPositioningClasses();

function addPositioningClasses() {
    var $card = __OBJECTS.pop();
    $card.addClass('position');
    if (__OBJECTS.length) {
        setTimeout(addPositioningClasses, 500)
    }
}

Probado en violín: http://jsfiddle.net/jomanlk/haGfU/

 9
Author: JohnP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-05 07:53:19

Qué tal .delay () ?

O

function addPositioningClasses($card){
  setTimeout(function() { $card.addClass('position')}, 1000);
}
 3
Author: diEcho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-05 07:51:55

Si solo se dirige a Safari/iOS, dependiendo de lo importante que sea para usted controlar el tiempo exacto de las secuencias de animación, tal vez debería evitar cualquier solución que implique tiempos de espera JS. No hay garantía de que la animación se complete al mismo tiempo que el tiempo de espera, particularmente en procesadores lentos o máquinas que tienen muchas cosas en segundo plano. Las versiones posteriores de webkit (incluyendo mobile safari) permiten secuencias de animación temporizadas a través de @-webkit-keyframes. Webkit.org tiene una buena introducción. En realidad es bastante fácil de implementar.

 1
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-05 08:05:07

Pruebe esto:

function positionCards() {
  $('#gameboard .card').each(function() {
      $(this).delay(500).addClass('position');
  });
}

Seré honesto... He tenido this (esto).delay () se comporta mal en el pasado en ciertos casos y funciona sin problemas en otros. Sin embargo, esto era normalmente en conjunción con las llamadas de animación jQuery, no la manipulación de atributos DOM.

Tenga en cuenta .delay () no funciona de la misma manera que setTimeout. Para obtener más información, consulte el jQuery .delay () documentation .

Hasta donde yo sé, $().cada uno ejecuta proceduralmente por lo que el la siguiente iteración de la llamada solo debe comenzar después de que se haya completado la anterior.

 1
Author: lsuarez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-05 09:08:42

Mira esto, funcionó bien para mí! :)

jQuery('.optiresultsul li').each(function(index) {
    jQuery(this).delay(500*index).animate({ opacity: 1 }, 500,function(){
        jQuery(this).addClass('bgchecked');
    });
});
 0
Author: Deian Motov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-23 09:25:55

Este código agregará el retardo inicial a 50 ms. Luego para cada bucle a través del ".fila " clase se añadirá un retraso adicional de 200ms. Esto creará un agradable efecto de espectáculo retardado para cada fila.

$( document ).ready(function() {
    // set inital delay
    var dtotal = 50;
    $(".row").each(function() {
    //add delay to function
      $(this).delay(dtotal).show();
    //add 200ms to delay for each loop
      dtotal = dtotal + 200;
    });
});
 -1
Author: LeeF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-25 18:15:35