2015-07-13 12 views
23

Ho un bug frustrante in Safari attorno al ritardo di animazione CSS.Timer di animazione CSS disattivato in Safari e Mobile Chrome

Questa animazione funziona magnificamente su Desktop in Chrome, Firefox, IE11, IE10, ma ottengo risultati misti in Safari. I pezzi della borsa dovrebbero tutti essere visualizzati dopo una quantità uguale di pausa (controllata dal ritardo dell'animazione).

Desktop Safari a volte viene visualizzato correttamente, mentre altre volte rallentano la prima parte della transizione della borsa e accelerano la fine, o raggrupperà alcune transizioni insieme. In Safari mobile e Chrome mobile su un iPhone 6, a volte ignorerà il ritardo di animazione tutti insieme e trasferirà l'intera busta in una sola volta. Ho difficoltà a risolvere i problemi quando le prestazioni non sono coerenti. Ho aggiunto un piccolo JavaScript per assicurarmi che tutte le risorse siano state caricate sulla pagina prima di avviare l'animazione, ma ciò non sembra essere di aiuto. Qualcuno ha idea di cosa sta succedendo qui?

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; 
    } 
} 
+0

Questa risposta aiuta in qualsiasi modo: http://stackoverflow.com/a/9431098/4586918 – akshay

+0

Grazie akshay, ma non aiuta. Ho già impostato tutto come consigliato in quella risposta. – Brenda

risposta

6

quello di cercare di utilizzare un semplice passaggio al posto di un'animazione fotogramma chiave? stai solo passando l'opacità qui - magari usando una curva bezier personalizzata puoi ottenere lo stesso effetto.

si potrebbe anche provare a sostituire -webkit-transform: translateZ (0); con -webkit-transform: translate3d (0,0,0); - Ho notato problemi di temporizzazione tra i due in passato (stai usando questa tecnica solo per forzare gli elementi sul loro stesso livello hardware giusto?)

+0

Divertente, il mio primo tentativo ha usato le curve cubico-bezier. Ma non mi piaceva quanto potessi controllarli. http://codepen.io/brendamarienyc/pen/RPjGLJ Ho appena provato a passare alle transizioni (bel suggerimento), e usando un ritardo di transizione, e attivato il cambio di opacità di ogni borsa con JavaScript con setTimeout, e la transizione- i ritardi si sono comportati esattamente nello stesso modo sporadico dei ritardi dell'animazione. Come potete vedere, ho lanciato il lavello della cucina per vedere se qualcosa ha fatto una differenza di prestazioni. Penso che siano solo troppe GPU per dispositivi mobili e sto passando a jQuery. Grazie! – Brenda

9

Anche se in Chrome si visualizza bene, anche lì ci sono prestazioni i problemi. Cercare di ottenere statistiche sulle prestazioni è un bug e fare 6 copie del design di base e disabilitare GPU riproduce il problema sul mio computer (Chrome su Windows).

Bene, ecco il mio tentativo di ottimizzare le prestazioni del tuo progetto.

Prima di tutto, si sta utilizzando l'opacità, ma senza transizione, spostandosi molto velocemente da 0 a 1. Se tutto ciò che si desidera è modificare la visibilità dell'elemento, è possibile utilizzare la visibilità per questo. Funzionerà molto più velocemente.

In secondo luogo, si utilizza un'animazione diversa per i 5 diversi sacchetti. E questo mantiene le prime borse visibili, ma nascoste sotto le altre nell'ultima parte dell'animazione. Puoi riutilizzare la stessa animazione per tutti gli elementi, cambiando semplicemente il ritardo dell'animazione. Nella mia demo vedrai che i fotogrammi chiave sono più semplici, al costo di una maggiore complessità nel ritardo dell'animazione. Si noti inoltre che spengo la visibilità non appena possibile, per evitare il costo della visualizzazione di un elemento altrimenti invisibile.

Il modo in cui sono state gestite le sovrapposizioni ha richiesto la ripetizione del primo elemento di ciascuna classe, una volta statica e un'altra mostra per alcuni istanti alla fine del ciclo. Ho modificato questo schema per un altro in cui cambio lo z-index degli elementi. Ora non è necessario ripetere l'elemento.

Infine, ho raggruppato diversi articoli sotto una classe di sacchetti e sto disattivando anche la visibilità del contenitore della busta.Credo che questo ottimizza in qualche modo le prestazioni, ma non sono sicuro a questo proposito

mio 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"> 
 
\t </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"> 
 
\t </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>

C'è anche un'altra possibilita, che sarà molto più efficiente, ma che è meno flessibile: puoi raggruppare le immagini della stessa classe in un'immagine composita e gestirle come una modifica di sprite (modificando la posizione dell'immagine di sfondo.) Tuttavia è necessario riprogettazione completa per questa:

+0

Grazie per aver guardato questo, e mi piacciono molti dei tuoi suggerimenti per l'ottimizzazione, (specialmente usando gli sprite), ma la tua risposta non affronta la mia domanda originale, che riguardava le prestazioni buggy in Safari desktop, Safari mobile e Chrome mobile . Nella tua soluzione, l'animazione non funziona affatto per me quando l'ho provato su questi browser (iOS iPhone 6, OSX Yosemite), le borse si caricano staticamente e non si animano mai. – Brenda

+1

Ho dimenticato di impostare i prefissi del webkit. Non riesco a testarlo su quei browser, ma ho aggiunto i prefissi webkit e ora dovrebbe essere eseguito. (Potrebbe essere utile calc nei ritardi potrebbe causare problemi .. in questo caso, basta impostare il valore a mano.Ho mantenuto la versione di calcolo in modo che sia facile vedere cosa sta succedendo) – vals

+0

Non ho avuto molto tempo questa settimana, ma ho iniziato a rifattare ciò che hai sopra per compiacere Safari usando Sass per fare i calcoli, e usando il longform invece della stenografia dell'animazione satchel, e vedevo delle buone prestazioni! La tempistica è un po 'spenta verso la fine dell'animazione, ma questo mi sta dando una buona direzione. Pubblicherò quando ho finito il refactoring. Grazie vals! – Brenda

4

da quello che vedo non sta effettivamente dando ritardi agli elementi correttamente, l'assegnazione del ritardo dell'animazione deve essere qualcosa del genere.

.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; 
    } 
0

ho giocato un po 'con la CSS così come ho cercato per i telefoni webkit questioni specifiche, ma non ho trovato nulla di utile.

Quindi in pratica ho rifatto il problema e ho utilizzato CSS transitions per gli effetti di dissolvenza in apertura/uscita e jQuery per la gestione del tempo di queste animazioni.

See the Demo.

L'ho provato su iOS e Safari, così come su altri browser, e ha funzionato bene per me.

HTML (immagini raggruppati per modello borsa)

<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 (sostituite tutte le animazioni CSS3 per queste poche righe di codice)

.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 (è possibile impostare i parametri di animazione)

$(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 

}); 
+0

Ho appena fatto 3 modelli di borse ma può essere facilmente esteso. Spero che questo ti aiuti! – Oriol

Problemi correlati