2010-04-06 7 views
116

Sto tentando di replicare un indicatore di attività in stile Apple (icona di caricamento della meridiana) utilizzando un'animazione PNG e CSS3. Ho l'immagine che ruota e la eseguo continuamente, ma sembra esserci un ritardo dopo che l'animazione è terminata prima di fare la prossima rotazione.Animazione di rotazione continua CSS3 (proprio come una meridiana di caricamento)

@-webkit-keyframes rotate { 
    from { 
    -webkit-transform: rotate(0deg); 
    } 
    to { 
    -webkit-transform: rotate(360deg); 
    } 
} 
#loading img 
{ 
    -webkit-animation-name:    rotate; 
    -webkit-animation-duration:   0.5s; 
    -webkit-animation-iteration-count: infinite; 
    -webkit-transition-timing-function: linear; 
    } 

Ho provato a cambiare la durata animazione, ma non fa differenza se si rallenta proprio giù dire 5s suo solo più evidente che dopo la prima rotazione c'è una pausa prima ruota nuovamente. È questa la pausa di cui voglio liberarmi.

Qualsiasi aiuto è molto apprezzato, grazie.

+14

codice specifico per Webkit non lo rende meno CSS3 .. considerando che nessuno degli altri fornitori di fatto fornire funzioni uguali a quel tempo :) –

+4

Non dovrebbe l'animazione va da 0 a 359? Se viene eseguito da 0 a 360, il frame su 0 viene riprodotto due volte, poiché frame 0 e frame 360 ​​sarebbero uguali ... –

+1

@BradParks D'altra parte, se si passa da 0 a 359, quindi l'animazione che dovrebbe aver luogo a 359.5 viene saltata completamente. Nella maggior parte dei casi, la sovrapposizione di 0 e 360 ​​sarà così rapida da essere inavvertita. – Blazemonger

risposta

71

Il tuo problema qui è che hai fornito un -webkit-TRANSITION-timing-function quando vuoi un -webkit-ANIMATION-timing-function. I tuoi valori da 0 a 360 funzioneranno correttamente.

+0

Impressionante grazie – Gcoop

+0

Un tipico errore di copia-incolla. Molte grazie! (In realtà ho ricevuto il mio css da [shareaholic] (http://www.shareaholic.com/) e, a causa della proprietà erroneamente denominata, usava la funzione di temporizzazione 'easy' di default). – doekman

1

Il tuo codice sembra corretto. Suppongo che sia qualcosa a che fare con il fatto che stai usando un file .png e il modo in cui il browser ridisegna l'oggetto a rotazione è inefficiente, causando il blocco (quale browser stai testando sotto?)

Se possibile, sostituire il .png con qualcosa di nativo.

vedere; http://kilianvalkhof.com/2010/css-xhtml/css3-loading-spinners-without-images/

Chrome non mi dà pause utilizzando questo metodo.

+0

Perfetto, sono abbastanza sicuro che la tua ipotesi è corretta, tuttavia sto usando un PNG perché l'icona di caricamento non è una meridiana è un simbolo di stile nucleare ... Non deve essere però così posso cambiarlo con il metodo che suggerisci - grazie! – Gcoop

8
+9

Molto bello. Colleziono effettivamente spinner, sia 'GIF' che' CSS'. [La mia collezione] (http://zanstra.home.xs4all.nl/picks/progress.html#css_animations). Se ne sai di più, per favore fammi sapere. – doekman

+0

Questi sono alcuni filatori epici. Bel lavoro. –

44

Si potrebbe anche notare un po 'di ritardo a causa 0deg e 360deg sono nello stesso punto, quindi sta andando dal punto 1 in un cerchio torna a individuare 1. E 'davvero insignificante, ma per risolvere il problema, tutto quello che dovete fare è cambiare 360deg a 359deg

my jsfiddle illustrates your animation:

#myImg { 
    -webkit-animation: rotation 2s infinite linear; 
} 

@-webkit-keyframes rotation { 
    from {-webkit-transform: rotate(0deg);} 
    to {-webkit-transform: rotate(359deg);} 
} 

anche quello che potrebbe essere più somigliante del ico mela carico n sarebbe un'animazione che transiziona l'opacità/colore delle strisce di grigio invece di ruotare l'icona.

+3

Il tuo JS Fiddle contiene l'implementazione più succinta che ho visto per la rotazione delle immagini semplice - perfetta (e grazie per la pubblicazione). –

+0

grazie fatemi sapere se avete bisogno di altro aiuto, a proposito, ho usato i prefissi webkit per l'animazione ma dovreste anche includere i prefissi di mozilla perché usano invece la regola -moz-css. –

+0

puoi anche moltiplicare il tempo e l'angolo per 100 - es. Da 0 a 36000 gradi :-) –

1

Ho creato un small library che consente di utilizzare facilmente un fotogramma senza immagini.

Usa CSS3 ma ricade su JavaScript se il browser non lo supporta.

// First argument is a reference to a container element in which you 
// wish to add a throbber to. 
// Second argument is the duration in which you want the throbber to 
// complete one full circle. 
var throbber = throbbage(document.getElementById("container"), 1000); 

// Start the throbber. 
throbber.play(); 

// Pause the throbber. 
throbber.pause(); 

Example.

26

Si potrebbe utilizzare l'animazione in questo modo:

-webkit-animation: spin 1s infinite linear; 

@-webkit-keyframes spin { 
    0% {-webkit-transform: rotate(0deg)} 
    100% {-webkit-transform: rotate(360deg)} 
} 
+2

soluzione impressionante e facile! –

Problemi correlati