Alex Grande の答えは、いくつかのキーフレームでうまく機能します。しかし、キーフレームを何度も動的に追加し続けたい場合、Web ページは非常に速く遅延します。この問題を解決するには、新しい DOM 要素の作成をやめてください。むしろ、1 つの新しい DOM スタイルシートを作成し、insertRule
. さらに多くのキーフレームが必要な場合 (アニメーション フレームごとに新しいキーフレームを生成する場合など)、使用されなくなった古いキーフレームを削除するシステムをセットアップする必要があります。これは、このようなことを達成するための良いスタートです。
var myReuseableStylesheet = document.createElement('style'),
addKeyFrames = null;
document.head.appendChild( myReuseableStylesheet );
if (CSS && CSS.supports && CSS.supports('animation: name')){
// we can safely assume that the browser supports unprefixed version.
addKeyFrames = function(name, frames){
var pos = myReuseableStylesheet.length;
myReuseableStylesheet.insertRule(
"@keyframes " + name + "{" + frames + "}", pos);
}
} else {
addKeyFrames = function(name, frames){
// Ugly and terrible, but users with this terrible of a browser
// *cough* IE *cough* don't deserve a fast site
var str = name + "{" + frames + "}",
pos = myReuseableStylesheet.length;
myReuseableStylesheet.insertRule("@-webkit-keyframes " + str, pos);
myReuseableStylesheet.insertRule("@keyframes " + str, pos+1);
}
}
使用例:
addKeyFrames(
'fadeAnimation',
'0%{opacity:0}' +
'100%{opacity:1}'
);
また、Alex Grande さん、 IE8 以降は不要であり、IE10 まではサポートされていないdocument.getElementsByTagName('head')[0]
と確信しています。ただ言って...type = 'text/css'
@keyframes