Lesen Sie unten für meine letzte Bearbeitung!CSS3 Sprite Animation ohne Tweening
Ist es möglich, CSS3-Animationen zu verwenden, ohne dass die Animationen zwischen Frames tweenen?
Zum Beispiel habe ich ein Bild, dass ich zwei Zeichen Animation Sprites auf. Sie sind gleichmäßig 50px beabstandet. Wenn ich die folgende Animation verwende, bekomme ich immer noch ein Tween (obwohl es ein sehr schnelles Tween ist, so dass es wie ein Flimmern aussehen kann).
#ball .animated{
-webkit-animation-name: animate;
-webkit-animation-duration: .5s;
-webkit-animation-iteration-count: infinite;
-webkit-animation-direction: alternate;
-webkit-animation-timing-function: linear;}
@-webkit-keyframes animate{
0%{-webkit-transform: translate3d(0,0,0);}
49%{-webkit-transform: translate3d(0,0,0);}
50%{-webkit-transform: translate3d(-50px,0,0);}
100%{-webkit-transform: translate3d(-50px,0,0);}
So basierend auf dem obigen, der Sprite-Rahmen sollte auf dem ersten Teil des Bildes gehalten werden (x = 0 Pixel) für das erste 0-49% der Dauer und dann zum zweiten Teil des Sprung Bild (x = -50px) für 50-100%. Der Unterschied von 1% ist jedoch immer noch ausreichend, um ein Tween von 0 bis -50px visuell zu sehen.
Gedanken?
Edit:
-webkit-animation-timing-function: cubic-bezier(1,0,1,0);
Die oben schien es ein wenig zu begradigen, aber nach einer Weile geht es zurück zu Flimmern.
Bearbeiten: Ich hatte nicht erkannt, dass Sie Dezimalstellen mit den Prozentsätzen verwenden konnten. Schließen die Lücke von 1% bis 0,1% schafft ein viel schnelleres Tweens, das fast nicht sichtbar ist (mit -webkit-animation-duration:
< 1s;)
0%{-webkit-transform: translate3d(0,0,0);}
49.9%{-webkit-transform: translate3d(0,0,0);}
50%{-webkit-transform: translate3d(-50px,0,0);}
100%{-webkit-transform: translate3d(-50px,0,0);}
Schluss bearbeiten !: Ok, also von dem, was ich habe Bei gefundenen Web-Kit-Animationen wird eine Dezimalzahl bis zum millionsten Platz (dh 0,0001) akzeptiert. Was bei einem relativ schnellen Animationstimer zu einer sofortigen Übersetzung führt. Ein bisschen von einem Hack nehme ich an, aber es macht den Trick.
Beispiel:
@-webkit-keyframes sprite {
0% {
-webkit-transform: translate3d(0,0,0);
}
50% {
-webkit-transform: translate3d(0,0,0);
}
50.0001%{
-webkit-transform: translate3d(-50px,0,0);
}
100%{
-webkit-transform: translate3d(-50px,0,0);
}
}
Das obige Beispiel ist für ein Bild 100 Pixel (jeder Sprit auf dem Bild ist 50 Pixel breit) innerhalb eines Behälters div mit den width: 50px
und overflow:hidden
um nur das Bild einen Sprit zeigt in eine Zeit.
Hinweis: Ich verwende translate3d, weil es in mobilen Browsern hardwarebeschleunigt ist, wo translateX, translateY, translateZ noch nicht hardwarebeschleunigt sind.
Ich versuche derzeit, ein kubisches Bezier zu verwenden, das eine vertikale Linie ist. – Empereol
Empereol: Leider unterstützen CSS-Animationen derzeit keine Nicht-Tweening-Keyframes. Ihre Lösung sieht auf einem sehr schnellen Computer möglicherweise nicht gleich aus (da Sie immer noch ein paar Frames zwischen den beiden Zuständen erfassen können). Ich würde vorschlagen, sprite.js http://www.readwriteweb.com/hack/2010/12/spritejs-javascript-sprite-framework.php zu verwenden, das das große tut. – Duopixel
Daten gehören in HTML, Stile gehören in CSS, Interaktionen gehören in JS. Es klingt für mich wie Sie versuchen, eine Interaktion mit einer Styling-Sprache zu erstellen. – zzzzBov