js経由でcss keyframeアニメーションを使う
- jeremy kahnはこれをcssプリレンダリングと命名してる
- 命名としてわかりにくい
- 「CSSのアニメーションのパフォーマンスについて、長きに渡り研究を重ねて来たJeremy Kahnがたどり着いた一つの解答。CSSプリレンダリングと名付けた手法について詳しく解説。」と書かれてるのを読んでもよくわからなかったのでメモ
- 割とシンプルな話
jeremyの記事
- 60 FPS or Bust: Dynamically Prerendering CSS Animations - Jeremy Kahn's Dev Blog
- 書いてる内容
- requestanimationframeは関係ない
- jsライブラリRekapiを使って色々楽をする
- style生成
- polyfill
やってること
cssのkeyframeアニメーションやるならこんなスタイルを書く。
.stylie {
-moz-animation-name: stylie-transform-keyframes;
-moz-animation-duration: 2000ms;
-moz-animation-delay: 0ms;
-moz-animation-fill-mode: forwards;
-moz-animation-iteration-count: infinite;
-ms-animation-name: stylie-transform-keyframes;
-ms-animation-duration: 2000ms;
-ms-animation-delay: 0ms;
-ms-animation-fill-mode: forwards;
-ms-animation-iteration-count: infinite;
-o-animation-name: stylie-transform-keyframes;
-o-animation-duration: 2000ms;
-o-animation-delay: 0ms;
-o-animation-fill-mode: forwards;
-o-animation-iteration-count: infinite;
-webkit-animation-name: stylie-transform-keyframes;
-webkit-animation-duration: 2000ms;
-webkit-animation-delay: 0ms;
-webkit-animation-fill-mode: forwards;
-webkit-animation-iteration-count: infinite;
animation-name: stylie-transform-keyframes;
animation-duration: 2000ms;
animation-delay: 0ms;
animation-fill-mode: forwards;
animation-iteration-count: infinite;
}
@-moz-keyframes stylie-transform-keyframes {
0% {-moz-transform:translateX(0px) translateY(0px);}
100% {-moz-transform:translateX(400px) translateY(0px);}
}
@-ms-keyframes stylie-transform-keyframes {
0% {-ms-transform:translateX(0px) translateY(0px);}
100% {-ms-transform:translateX(400px) translateY(0px);}
}
@-o-keyframes stylie-transform-keyframes {
0% {-o-transform:translateX(0px) translateY(0px);}
100% {-o-transform:translateX(400px) translateY(0px);}
}
@-webkit-keyframes stylie-transform-keyframes {
0% {-webkit-transform:translateX(0px) translateY(0px);}
100% {-webkit-transform:translateX(400px) translateY(0px);}
}
@keyframes stylie-transform-keyframes {
0% {transform:translateX(0px) translateY(0px);}
100% {transform:translateX(400px) translateY(0px);}
}
スタイルのリストを生成する手間を軽減するのがrekapi
-
- Rekapi - A keyframe animation library for the web
- polyfillにもなってる
- keyframeアニメーション非サポートブラウザ向けにはピュアjsアニメーションを用意してくれる。