亚历克斯格兰德的回答对几个关键帧非常有效。但是,假设您想一遍又一遍地动态添加关键帧,那么您的网页会很快变得非常滞后。要解决这个问题,只需停止创建新的 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}'
);
此外,亚历克斯大,我敢肯定,document.getElementsByTagName('head')[0]
并且type = 'text/css'
还没有被IE8需要,并且@keyframes
不支持,直到IE10。就是说...