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アニメーションを用意してくれる。