2011-02-06 2 views
58

Ho trovato questo articolo:Come creare un effetto di impulsi utilizzando -webkit-animazione - anelli verso l'esterno

http://www.zurb.com/article/221/css3-animation-will-rock-your-world su animazioni CSS3.


Sto cercando di creare un effetto simile visto sul sito di cui sopra, ma sul sito personale all'indirizzo: www.imfrom.me

dove ho stato del Maine, c'è la casella punta rossa. Voglio creare un anello di impulsi con la freccia che indica la posizione.


AGGIORNATO CON CODICE:

sono arrivato fino a questo sotto (provarlo qui: http://jsfiddle.net/ftrJn/) come si può dire la sua stretta, qualche idea su come posso farlo crescere dal centro:

.gps_ring { 
    border: 3px solid #999; 
    -webkit-border-radius: 30px; 
    height: 18px; 
    width: 18px; 
    position: absolute; 
    left:20px; 
    top:214px; 
} 
.gps_ring{ 
    -webkit-animation-name: pulsate; 
    -webkit-animation-duration: 1s; 
    -webkit-animation-timing-function: ease-in-out; 
    -webkit-animation-iteration-count: infinite 
} 
@-webkit-keyframes pulsate { 
    0% { width:1px;height: 1px; opacity: 0.0} 
    10% { width:3px;height: 3px; opacity: .20} 
    20% { width:5px;height: 5px; opacity: .40 } 
    30% { width:7px;height: 7px; opacity: .60 } 
    40% { width:9px;height: 9px; opacity: .80 } 
    50% { width:11px;height: 11px; opacity: 1.0} 
    60% { width:13px;height: 13px; opacity: .80} 
    70% { width:15px;height: 15px; opacity: .60} 
    80% { width:17px;height: 17px; opacity: .40} 
    90% { width:19px;height: 19px; opacity: .20} 
    100% { width:21px;height: 21px; opacity: 0.0} 
} 

Pensieri su che al di sopra?

Qualche idea su come posso creare qualcosa del genere come se gli anelli si animassero e svanissero?

risposta

139

Hai un sacco di fotogrammi chiave inutili. Non pensare ai fotogrammi chiave come fotogrammi individuali, considerali come "passaggi" nell'animazione e il computer riempie i fotogrammi tra i fotogrammi chiave.

Ecco una soluzione che pulisce un sacco di codice e rende l'inizio di animazione dal centro:

.gps_ring { 
    border: 3px solid #999; 
    -webkit-border-radius: 30px; 
    height: 18px; 
    width: 18px; 
    position: absolute; 
    left:20px; 
    top:214px; 
    -webkit-animation: pulsate 1s ease-out; 
    -webkit-animation-iteration-count: infinite; 
    opacity: 0.0 
} 
@-webkit-keyframes pulsate { 
    0% {-webkit-transform: scale(0.1, 0.1); opacity: 0.0;} 
    50% {opacity: 1.0;} 
    100% {-webkit-transform: scale(1.2, 1.2); opacity: 0.0;} 
} 

Potete vederlo in azione qui: http://jsfiddle.net/Fy8vD/

+0

Sembra fantastico! Grazie per i suggerimenti. La facilità di uscita gli consente di crescere dal centro? – Coughlin

+1

No, è "-webkit-transform: scale (x, x)" cosa consente di scalare dal centro. Il punto di trasformazione predefinito è il centro dell'oggetto, ma se si volesse cambiarlo si posizionerebbe "-webkit-transform-origin: in alto a sinistra o 0% 0% in .gps_ring. – Duopixel

+2

Questo non funzionava per me in Chrome a causa ad una sorta di ottimizzazione che ha fermato completamente l'animazione perché è iniziata invisibile, cambiando la scala iniziale a '0.01, 0.01 'ha risolto il problema – Nimphious

8

O se volete un ripple effetto di impulso, è possibile utilizzare questo:

http://jsfiddle.net/Fy8vD/3041/

.gps_ring { 
    border: 2px solid #fff; 
    -webkit-border-radius: 50%; 
    height: 18px; 
    width: 18px; 
    position: absolute; 
    left:20px; 
    top:214px; 
    -webkit-animation: pulsate 1s ease-out; 
    -webkit-animation-iteration-count: infinite; 
    opacity: 0.0; 
} 
.gps_ring:before { 
    content:""; 
    display:block; 
    border: 2px solid #fff; 
    -webkit-border-radius: 50%; 
    height: 30px; 
    width: 30px; 
    position: absolute; 
    left:-8px; 
    top:-8px; 
    -webkit-animation: pulsate 1s ease-out; 
    -webkit-animation-iteration-count: infinite; 
    -webkit-animation-delay: 0.1s; 
    opacity: 0.0; 
} 
.gps_ring:after { 
    content:""; 
    display:block; 
    border:2px solid #fff; 
    -webkit-border-radius: 50%; 
    height: 50px; 
    width: 50px; 
    position: absolute; 
    left:-18px; 
    top:-18px; 
    -webkit-animation: pulsate 1s ease-out; 
    -webkit-animation-iteration-count: infinite; 
    -webkit-animation-delay: 0.2s; 
    opacity: 0.0; 
} 
@-webkit-keyframes pulsate { 
    0% {-webkit-transform: scale(0.1, 0.1); opacity: 0.0;} 
    50% {opacity: 1.0;} 
    100% {-webkit-transform: scale(1.2, 1.2); opacity: 0.0;} 
}