2013-03-18 8 views
5

próbuje błyskać trzy elementy z rzędu animacjami css3. Mam go uruchomione, ale jest zanikanie dla każdej ramki i chciałbym go usunąć. idealnie każdy element pozostaje widoczny przez 1s, a następnie natychmiast się chowa.Twarde mignięcia css3 (bez zanikania pomiędzy klatkami)

Próbowałem ustawienie animacji z ramkami na 0% i 99% dla opacity:1 i 100% dla opacity: 0 ale nadal nie szczęścia.

Mam nadzieję, że jest sposób na usunięcie zaniku!

webkit js fiddle

CSS:

.motion.play .frame { 
    -webkit-animation-name: flash; 
    -webkit-animation-duration: 3s; 
    -webkit-animation-iteration-count: infinite; 
    -webkit-animation-direction: linear; 
} 
    .frame:nth-of-type(2) { 
     -webkit-animation-delay: 1s; 
    } 
    .frame:nth-of-type(3) { 
     -webkit-animation-delay: 2s; 
    } 

    @-webkit-keyframes flash { 
     0% { 
      opacity: 1; 
     } 
     100% { 
      opacity: 0; 
     } 
    } 

Odpowiedz

5

Zastosowanie właściwego animation-timing-function:

http://jsfiddle.net/rfGDD/1/ (tylko WebKit)

.motion.play .frame { 
    -webkit-animation-name: flash; 
    -webkit-animation-duration: 3s; 
    -webkit-animation-iteration-count: infinite; 
    -webkit-animation-direction: normal; /* not "linear" */ 
    -webkit-animation-fill-mode:forwards; 
    -webkit-animation-timing-function:steps(3, end); 
} 

MDN document on fill-mode

MDN document on direction

MDN document on steps() timing function

Edit:

Ups, właśnie realizowany logiczną wadę.

poprawiona: http://jsfiddle.net/rfGDD/3/ (tylko WebKit)

Oprócz wyżej zmiany zmiana animacji flash do następujących:

@-webkit-keyframes flash { 
    0% { 
     opacity: 1; 
    } 
    33% { 
     opacity: 0; 
    } 
    100% { 
     opacity: 0; 
    } 
} 

Problemem jest animacja odgrywa 3 sekundy, a każdy element zapotrzebowanie pozostać w stanie opacity:0 po drugim numerze 1, więc muszę podzielić animację na 2 etapy (ze współczynnikiem czasu 1: 2), aby elementy mogły wyglądać tak, jakby pozostały w końcowej fazie przez 2 sekundy.

+0

dzięki za odpowiedź! rozumiem, co mówisz o trybie wypełnienia i kierunku, ale widzisz problem z krokami. jak na twoje skrzypce, są zdecydowanie trzy etapy animacji, ale po prostu robi się coraz ciemniej. zamiast tego powinien migać stałym czerwonym, zielonym, niebieskim bez blaknięcia lub utraty jasności. jeśli skomentuję funkcję taktowania, lepiej będzie po prostu migać każdy kolor, ale ma on od zera 100% do 0, którego staram się unikać. jakieś pomysły? – technopeasant

+0

@technopeasant Ups, mój błąd. Zaktualizowałem swoją odpowiedź, sprawdź! – Passerby

7

Po prostu zdefiniuj swoją animację, aby zachować jak najdłużej jeden stan, a następnie przełącz się na drugi tak szybko, jak to możliwe. W ten sposób:

@-webkit-keyframes flash { 
     0% { opacity: 1; } 
    49% { opacity: 1; } 
    50% { opacity: 0; } 
    100% { opacity: 0; } 
} 
+0

To zdecydowanie powinna być odpowiedź. – skolind

1

Możesz zachować krycie przez najdłuższy okres i bardzo szybko go zmienić.

Spróbuj tego:

.div 
    animation: blink 1s linear infinite 

@keyframes blink 
    0%,50% 
    opacity: 0 
    51%,100% 
    opacity: 1 
Powiązane problemy