transiciones transicion examples ejemplos efectos avanzadas animaciones css safari mobile-safari css-animations mobile-chrome

transicion - Animación CSS: demora el tiempo de apagado en Safari y Chrome para dispositivos móviles



transition css examples (4)

Tengo un error frustrante en Safari sobre el retraso de la animación CSS.

Esta animación funciona muy bien en el escritorio en Chrome, Firefox, IE11, IE10, pero obtengo resultados mixtos en Safari. Las piezas de la bolsa deberían mostrarse después de una cantidad igual de pausa (controlada por el retraso de la animación).

Desktop Safari algunas veces se mostrará correctamente, y otras veces ralentizará la primera parte de la transición de la bolsa y acelerará el final, o agrupará algunas transiciones juntas. En el dispositivo móvil Safari y Chrome para dispositivos móviles en un iPhone 6, algunas veces solo ignorará la animación, demorará todas juntas y hará la transición completa de la bolsa de una vez. Me está costando solucionar problemas cuando el rendimiento no es constante. Agregué un poco de JavaScript para asegurarme de que todos los recursos estaban cargados en la página antes de comenzar la animación, pero eso no pareció ayudar. ¿Alguien tiene alguna idea de lo que está pasando aquí?

http://codepen.io/brendamarienyc/pen/qdoOZM

@-webkit-keyframes bag-1 { 0%, 19.9% { opacity: 0; } 20%, 100% { opacity: 1; } } @keyframes bag-1 { 0%, 19.9% { opacity: 0; } 20%, 100% { opacity: 1; } } .satchel-1 { -webkit-animation-name: bag-1; animation-name: bag-1; -webkit-animation-duration: 22500ms; animation-duration: 22500ms; -webkit-animation-iteration-count: infinite; animation-iteration-count: infinite; -webkit-transform: translateZ(0); transform: translateZ(0); opacity: 0; } .preload .satchel-1 { -webkit-animation-name: none !important; animation-name: none !important; } @-webkit-keyframes bag-2 { 0%, 39.9% { opacity: 0; } 40%, 100% { opacity: 1; } } @keyframes bag-2 { 0%, 39.9% { opacity: 0; } 40%, 100% { opacity: 1; } } .satchel-2 { -webkit-animation-name: bag-2; animation-name: bag-2; -webkit-animation-duration: 22500ms; animation-duration: 22500ms; -webkit-animation-iteration-count: infinite; animation-iteration-count: infinite; -webkit-transform: translateZ(0); transform: translateZ(0); opacity: 0; } .preload .satchel-2 { -webkit-animation-name: none !important; animation-name: none !important; } @-webkit-keyframes bag-3 { 0%, 59.9% { opacity: 0; } 60%, 100% { opacity: 1; } } @keyframes bag-3 { 0%, 59.9% { opacity: 0; } 60%, 100% { opacity: 1; } } .satchel-3 { -webkit-animation-name: bag-3; animation-name: bag-3; -webkit-animation-duration: 22500ms; animation-duration: 22500ms; -webkit-animation-iteration-count: infinite; animation-iteration-count: infinite; -webkit-transform: translateZ(0); transform: translateZ(0); opacity: 0; } .preload .satchel-3 { -webkit-animation-name: none !important; animation-name: none !important; } @-webkit-keyframes bag-4 { 0%, 79.9% { opacity: 0; } 80%, 100% { opacity: 1; } } @keyframes bag-4 { 0%, 79.9% { opacity: 0; } 80%, 100% { opacity: 1; } } .satchel-4 { -webkit-animation-name: bag-4; animation-name: bag-4; -webkit-animation-duration: 22500ms; animation-duration: 22500ms; -webkit-animation-iteration-count: infinite; animation-iteration-count: infinite; -webkit-transform: translateZ(0); transform: translateZ(0); opacity: 0; } .preload .satchel-4 { -webkit-animation-name: none !important; animation-name: none !important; } @-webkit-keyframes bag-5 { 0%, 99.9% { opacity: 0; } 100%, 100% { opacity: 1; } } @keyframes bag-5 { 0%, 99.9% { opacity: 0; } 100%, 100% { opacity: 1; } } .satchel-5 { -webkit-animation-name: bag-5; animation-name: bag-5; -webkit-animation-duration: 22500ms; animation-duration: 22500ms; -webkit-animation-iteration-count: infinite; animation-iteration-count: infinite; -webkit-transform: translateZ(0); transform: translateZ(0); opacity: 0; } .preload .satchel-5 { -webkit-animation-name: none !important; animation-name: none !important; } .satchel-container { height: 450px; width: 472px; margin: 2em auto; position: relative; } @media (max-width: 500px) { .satchel-container { height: 300px; width: 315px; } } .satchel-shadow { position: absolute; right: 0px; bottom: 0px; left: 0px; height: 94px; width: 472px; } @media (max-width: 500px) { .satchel-shadow { height: 63px; width: 315px; } } .satchel-body { position: absolute; right: 0px; bottom: 0px; left: 0px; height: 295px; width: 472px; -webkit-animation-delay: 0; animation-delay: 0; } @media (max-width: 500px) { .satchel-body { height: 197px; width: 315px; } } .satchel-gusset { position: absolute; bottom: 30px; left: 14px; height: 221px; width: 441px; -webkit-animation-delay: 450ms; animation-delay: 450ms; } @media (max-width: 500px) { .satchel-gusset { position: absolute; bottom: 20px; left: 10px; height: 149px; width: 294px; } } .satchel-piping { position: absolute; bottom: 22px; left: 21px; height: 268px; width: 429px; -webkit-animation-delay: 900ms; animation-delay: 900ms; } @media (max-width: 500px) { .satchel-piping { position: absolute; bottom: 15px; left: 14px; height: 179px; width: 286px; } } .satchel-collar { position: absolute; bottom: 15px; left: 30px; height: 63px; width: 412px; -webkit-animation-delay: 900ms; animation-delay: 900ms; } @media (max-width: 500px) { .satchel-collar { position: absolute; bottom: 7px; left: 20px; height: 42px; width: 275px; } } .satchel-strap { position: absolute; bottom: 70px; left: 139px; height: 370px; width: 195px; -webkit-animation-delay: 1350ms; animation-delay: 1350ms; } @media (max-width: 500px) { .satchel-strap { position: absolute; bottom: 47px; left: 92px; height: 247px; width: 130px; } } .satchel-narrow { position: absolute; bottom: 68px; left: 13px; height: 232px; width: 377px; -webkit-animation-delay: 1800ms; animation-delay: 1800ms; } @media (max-width: 500px) { .satchel-narrow { position: absolute; bottom: 46px; left: 8px; height: 155px; width: 251px; } }


¿Qué tal si tratamos de usar una transición simple en lugar de una animación de fotograma clave? aquí solo está haciendo la transición de la opacidad; quizás al usar una curva bezier personalizada pueda lograr el mismo efecto.

también podría intentar reemplazar -webkit-transform: translateZ (0); con -webkit-transform: translate3d (0,0,0); - He notado ligeros problemas de sincronización entre los dos en el pasado (estás usando esta técnica solo para forzar los elementos en su propia capa de hardware ¿no?)


Aunque en Chrome se muestra bien, incluso allí hay problemas de rendimiento. Tratar de obtener estadísticas de rendimiento es problemático, y hacer 6 copias del diseño base y deshabilitar la GPU reproduce el problema en mi máquina (Chrome en Windows).

Bueno, este es mi intento de optimizar el rendimiento de su diseño.

En primer lugar, está utilizando opacidad, pero sin transición, moviéndose muy rápido de 0 a 1. Si todo lo que desea es cambiar la visibilidad del elemento, puede usar visibilidad para esto. Funcionará mucho más rápido.

En segundo lugar, está usando una animación que es diferente para las 5 bolsas diferentes. Y eso mantiene las primeras bolsas visibles, pero escondidas debajo de las otras en la última parte de la animación. Puede reutilizar la misma animación para todos los elementos, simplemente cambiando la demora de la animación. Verás en mi demo que los fotogramas clave son más simples, a costa de una mayor complejidad en el retraso de la animación. También tenga en cuenta que desactivo la visibilidad lo antes posible para evitar el costo de mostrar un elemento invisible.

La forma en que manejó las superposiciones solicitó que se repitiera el primer elemento de cada clase, una vez estática y otra que se muestra durante algunos instantes al final del ciclo. He cambiado este esquema por otro en el que estoy cambiando el índice Z de los elementos. Ahora no necesita repetir el elemento.

Y, por último, he agrupado varios artículos en una clase de bolsos, y también estoy desactivando la visibilidad del contenedor de bolsas. Creo que esto de alguna manera optimiza el rendimiento, pero no estoy seguro de ello

Mi demo:

@-webkit-keyframes satchel { 0% { visibility: visible; z-index: 100; } 25% { visibility: visible; z-index: 1; } 25%, 100% { visibility: hidden; } } @keyframes satchel { 0% { visibility: visible; z-index: 100; } 25% { visibility: visible; z-index: 1; } 25%, 100% { visibility: hidden; } } .satchel-1, .satchel-2, .satchel-3, .satchel-4, .satchel-5 { -webkit-animation: satchel 22500ms infinite; animation-name: satchel; animation-duration: 22500ms; animation-iteration-count: infinite; } /* body 0ms gusset 450ms collar=900ms piping=900ms strap=1350ms narrow=1800ms */ .satchel-1.satchel-body { -webkit-animation-delay: calc(0ms - 22500ms); animation-delay: calc(0ms - 22500ms); } .satchel-1.satchel-gusset { -webkit-animation-delay: calc(450ms - 22500ms); animation-delay: calc(450ms - 22500ms); } .satchel-1.satchel-collar { -webkit-animation-delay: calc(900ms - 22500ms); animation-delay: calc(900ms - 22500ms); } .satchel-1.satchel-piping { -webkit-animation-delay: calc(900ms - 22500ms); animation-delay: calc(900ms - 22500ms); } .satchel-1.satchel-strap { -webkit-animation-delay: calc(1350ms - 22500ms); animation-delay: calc(1350ms - 22500ms); } .satchel-1.satchel-narrow { -webkit-animation-delay: calc(1800ms - 22500ms); animation-delay: calc(1800ms - 22500ms); } /* satchel-2 4500ms */ .satchel-2.satchel-body { -webkit-animation-delay: calc(0ms + 4500ms - 22500ms); animation-delay: calc(0ms + 4500ms - 22500ms); } .satchel-2.satchel-gusset { -webkit-animation-delay: calc(450ms + 4500ms - 22500ms); animation-delay: calc(450ms + 4500ms - 22500ms); } .satchel-2.satchel-collar { -webkit-animation-delay: calc(900ms + 4500ms - 22500ms); animation-delay: calc(900ms + 4500ms - 22500ms); } .satchel-2.satchel-piping { -webkit-animation-delay: calc(900ms + 4500ms - 22500ms); animation-delay: calc(900ms + 4500ms - 22500ms); } .satchel-2.satchel-strap { -webkit-animation-delay: calc(1350ms + 4500ms - 22500ms); animation-delay: calc(1350ms + 4500ms - 22500ms); } .satchel-2.satchel-narrow { -webkit-animation-delay: calc(1800ms + 4500ms - 22500ms); animation-delay: calc(1800ms + 4500ms - 22500ms); } /* satchel-3 9000ms */ .satchel-3.satchel-body { -webkit-animation-delay: calc(0ms + 9000ms - 22500ms); animation-delay: calc(0ms + 9000ms - 22500ms); } .satchel-3.satchel-gusset { -webkit-animation-delay: calc(450ms + 9000ms - 22500ms); animation-delay: calc(450ms + 9000ms - 22500ms); } .satchel-3.satchel-collar { -webkit-animation-delay: calc(900ms + 9000ms - 22500ms); animation-delay: calc(900ms + 9000ms - 22500ms); } .satchel-3.satchel-piping { -webkit-animation-delay: calc(900ms + 9000ms - 22500ms); animation-delay: calc(900ms + 9000ms - 22500ms); } .satchel-3.satchel-strap { -webkit-animation-delay: calc(1350ms + 9000ms - 22500ms); animation-delay: calc(1350ms + 9000ms - 22500ms); } .satchel-3.satchel-narrow { -webkit-animation-delay: calc(1800ms + 9000ms - 22500ms); animation-delay: calc(1800ms + 9000ms - 22500ms); } /* satchel-4 13500ms */ .satchel-4.satchel-body { -webkit-animation-delay: calc(0ms + 13500ms - 22500ms); animation-delay: calc(0ms + 13500ms - 22500ms); } .satchel-4.satchel-gusset { -webkit-animation-delay: calc(450ms + 13500ms - 22500ms); animation-delay: calc(450ms + 13500ms - 22500ms); } .satchel-4.satchel-collar { -webkit-animation-delay: calc(900ms + 13500ms - 22500ms); animation-delay: calc(900ms + 13500ms - 22500ms); } .satchel-4.satchel-piping { -webkit-animation-delay: calc(900ms + 13500ms - 22500ms); animation-delay: calc(900ms + 13500ms - 22500ms); } .satchel-4.satchel-strap { -webkit-animation-delay: calc(1350ms + 13500ms - 22500ms); animation-delay: calc(1350ms + 13500ms - 22500ms); } .satchel-4.satchel-narrow { -webkit-animation-delay: calc(1800ms + 13500ms - 22500ms); animation-delay: calc(1800ms + 13500ms - 22500ms); } /* satchel-5 18000ms */ .satchel-5.satchel-body { -webkit-animation-delay: calc(0ms + 18000ms - 22500ms); animation-delay: calc(0ms + 18000ms - 22500ms); } .satchel-5.satchel-gusset { -webkit-animation-delay: calc(450ms + 18000ms - 22500ms); animation-delay: calc(450ms + 18000ms - 22500ms); } .satchel-5.satchel-collar { -webkit-animation-delay: calc(900ms + 18000ms - 22500ms); animation-delay: calc(900ms + 18000ms - 22500ms); } .satchel-5.satchel-piping { -webkit-animation-delay: calc(900ms + 18000ms - 22500ms); animation-delay: calc(900ms + 18000ms - 22500ms); } .satchel-5.satchel-strap { -webkit-animation-delay: calc(1350ms + 18000ms - 22500ms); animation-delay: calc(1350ms + 18000ms - 22500ms); } .satchel-5.satchel-narrow { -webkit-animation-delay: calc(1800ms + 18000ms - 22500ms); animation-delay: calc(1800ms + 18000ms - 22500ms); } @-webkit-keyframes bag { 0%, 35% { visibility: visible; } 35%, 100% { visibility: hidden; } } @keyframes bag { 0%, 35% { visibility: visible; } 35%, 100% { visibility: hidden; } } .bag { -webkit-animation-name: bag; -webkit-animation-duration: 22500ms; -webkit-animation-iteration-count: infinite; animation-name: bag; animation-duration: 22500ms; animation-iteration-count: infinite; z-index: 1000; position: absolute; height: 100%; width: 100%; } .bag:nth-child(2) { -webkit-animation-delay: calc(4500ms - 22500ms); animation-delay: calc(4500ms - 22500ms); } .bag:nth-child(3) { -webkit-animation-delay: calc(9000ms - 22500ms); animation-delay: calc(9000ms - 22500ms); } .bag:nth-child(4) { -webkit-animation-delay: calc(13500ms - 22500ms); animation-delay: calc(13500ms - 22500ms); } .bag:nth-child(5) { -webkit-animation-delay: calc(18000ms - 22500ms); animation-delay: calc(18000ms - 22500ms); } .satchel-container { height: 450px; width: 472px; margin: 2em; position: relative; display: inline-block; } @media (max-width: 500px) { .satchel-container { height: 300px; width: 315px; } } .satchel-shadow { position: absolute; right: 0px; bottom: 0px; left: 0px; height: 94px; width: 472px; } @media (max-width: 500px) { .satchel-shadow { height: 63px; width: 315px; } } .satchel-body { position: absolute; right: 0px; bottom: 0px; left: 0px; height: 295px; width: 472px; } @media (max-width: 500px) { .satchel-body { height: 197px; width: 315px; } } .satchel-gusset { position: absolute; bottom: 30px; left: 14px; height: 221px; width: 441px; } @media (max-width: 500px) { .satchel-gusset { position: absolute; bottom: 20px; left: 10px; height: 149px; width: 294px; } } .satchel-piping { position: absolute; bottom: 22px; left: 21px; height: 268px; width: 429px; } @media (max-width: 500px) { .satchel-piping { position: absolute; bottom: 15px; left: 14px; height: 179px; width: 286px; } } .satchel-collar { position: absolute; bottom: 15px; left: 30px; height: 63px; width: 412px; } @media (max-width: 500px) { .satchel-collar { position: absolute; bottom: 7px; left: 20px; height: 42px; width: 275px; } } .satchel-strap { position: absolute; bottom: 70px; left: 139px; height: 370px; width: 195px; } @media (max-width: 500px) { .satchel-strap { position: absolute; bottom: 47px; left: 92px; height: 247px; width: 130px; } } .satchel-narrow { position: absolute; bottom: 68px; left: 13px; height: 232px; width: 377px; animation-delay: calc(1800ms - 22500ms); } @media (max-width: 500px) { .satchel-narrow { position: absolute; bottom: 46px; left: 8px; height: 155px; width: 251px; } }

<section class="bag-animation"> <div class="satchel-container"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-shadow.png" class="satchel-shadow"> <!--Satchel Body--> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-body-marble-python.png" class="satchel-1 satchel-body"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-body-celedon.png" class="satchel-2 satchel-body"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-body-blue-python.png" class="satchel-body satchel-3"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-body-bone.png" class="satchel-4 satchel-body"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-body-black-croc.png" class="satchel-5 satchel-body"> <!--bag marble--> <div class="bag"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-gusset-marble-python.png" class="satchel-1 satchel-gusset"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-piping-marble-python.png" class="satchel-1 satchel-piping"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-strap-marble-python.png" class="satchel-1 satchel-strap"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-narrow-blue-python.png" class="satchel-1 satchel-narrow"> </div> <!--bag celedon--> <div class="bag"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-gusset-celedon.png" class="satchel-2 satchel-gusset"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-piping-celedon.png" class="satchel-2 satchel-piping"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-strap-celedon.png" class="satchel-2 satchel-strap"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-narrow-celedon.png" class="satchel-2 satchel-narrow"> </div> <!--bag blue--> <div class="bag"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-gusset-blue-python.png" class="satchel-3 satchel-gusset"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-piping-blue-python.png" class="satchel-3 satchel-piping"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-strap-blue-python.png" class="satchel-3 satchel-strap"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-narrow-blue-python.png" class="satchel-3 satchel-narrow"> </div> <!--bag bone--> <div class="bag"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-gusset-bone.png" class="satchel-4 satchel-gusset"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-piping-bone.png" class="satchel-4 satchel-piping"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-strap-bone.png" class="satchel-4 satchel-strap"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-narrow-bone.png" class="satchel-4 satchel-narrow"> </div> <!--bag bone--> <div class="bag"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-gusset-black-croc.png" class="satchel-5 satchel-gusset"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-piping-black-croc.png" class="satchel-5 satchel-piping"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-strap-black-croc.png" class="satchel-5 satchel-strap"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-narrow-black-croc.png" class="satchel-5 satchel-narrow"> </div> </div> </section>

También hay otra posibilidad, que será mucho más eficiente, pero que es menos flexible: puede agrupar sus imágenes de la misma clase en una imagen compuesta, y manejar esto como un cambio de sprite (modificando la posición de la imagen de fondo. un rediseño completo para este.


Jugué un poco con CSS , así como busqué problemas específicos de webkit para dispositivos móviles, pero no encontré nada útil.

Así que, básicamente, reformulé el problema y usé las CSS transitions para los efectos de fundido de entrada / salida y jQuery para administrar el tempo de estas animaciones.

Ver la demostración .

Lo probé en iOS y Safari, así como en otros navegadores, y funcionó bien para mí.

HTML (imágenes reagrupadas por modelo de bolsa)

<div id="bag1" class="bag shown"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-body-black-croc.png" class="satchel-static satchel-body"> <!-- <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-collar-blue-python.png" class="satchel-3 satchel-collar"> --> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-gusset-black-croc.png" class="satchel-static satchel-gusset"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-piping-black-croc.png" class="satchel-static satchel-piping"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-strap-black-croc.png" class="satchel-static satchel-strap"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-narrow-marble-python.png" class="satchel-static satchel-narrow"> </div> <div id="bag2" class="bag"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-body-marble-python.png" class="satchel-1 satchel-body"> <!-- <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-collar-bone.png" class="satchel-4 satchel-collar"> --> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-gusset-marble-python.png" class="satchel-1 satchel-gusset"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-piping-marble-python.png" class="satchel-1 satchel-piping"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-strap-marble-python.png" class="satchel-1 satchel-strap"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-narrow-blue-python.png" class="satchel-1 satchel-narrow"> </div> <div id="bag3" class="bag"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-body-celedon.png" class="satchel-2 satchel-body"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-gusset-celedon.png" class="satchel-2 satchel-gusset"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-piping-celedon.png" class="satchel-2 satchel-piping"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-strap-celedon.png" class="satchel-2 satchel-strap"> <img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/196308/satchel-narrow-celedon.png" class="satchel-2 satchel-narrow"> </div>

CSS (reemplazó todas las animaciones CSS3 por estas pocas líneas de código)

.bag img { z-index: 0; opacity: 0; -webkit-transition: opacity .1s ease-in-out; transition: opacity .1s ease-in-out; } .shown img { opacity: 1; } .shown img.satchel-strap, .shown img.satchel-narrow { z-index: 2; } .bag .fadeIn { opacity: 1; z-index: 1; } .bag .fadeIn.satchel-strap, .bag .fadeIn.satchel-narrow { z-index: 3; }

jQuery (puede establecer los parámetros de animación)

$(document).ready(function() { var $bags = [$(''#bag1''), $(''#bag2''), $(''#bag3'')], piecesDelay = 400, bagsDelay = 3000, timePiecesID, imgs; setTimeout(function() { loopThroughBags(1, 0); }, bagsDelay); function fadeInPieces(k) { $(imgs[k]).addClass(''fadeIn''); timePiecesID = setTimeout(function() { if (k < imgs.length - 1) { k++; fadeInPieces(k); } else { clearTimeout(timePiecesID); return; } }, piecesDelay); } // fadeInPieces ends function loopThroughBags(i, j) { imgs = $bags[i].find(''img''); fadeInPieces(0); setTimeout(function() { clearTimeout(timePiecesID); $bags[i].addClass(''shown''); $(imgs).removeClass(''fadeIn''); $bags[j].removeClass(''shown''); j = i; i = (i < $bags.length - 1) ? i + 1 : 0; loopThroughBags(i, j); }, bagsDelay); } // loopThroughBags ends });


por lo que veo, en realidad no estás retrasando los elementos correctamente, la asignación de retraso de la animación debe ser algo como esto.

.satchel-strap.satchel-#{$i}{ animation-delay: $bag-piece-timing * 1.5 * $i } .satchel-body.satchel-#{$i}{ animation-delay: $bag-piece-timing * $i; } .satchel-gusset.satchel-#{$i}{ animation-delay: $bag-piece-timing * 0.5 * $i } .satchel-piping.satchel-#{$i}{ animation-delay: $bag-piece-timing; } .stachel-collar.satchel-#{$i}{ animation-delay: $bag-piece-timing; }