有没有办法检测是否存在具有特定名称的CSS3动画,没有迭代所有CSS规则?
可以是使用JS库或普通JS的解决方案。没关系。
答案 0 :(得分:2)
你可以:
animationstart
事件绑定到此虚拟元素。.style.animationName
(使用适当的供应商前缀)。如果未触发事件,则假定动画不存在。不要忘记清理元素(即将其从DOM中删除)。
按设计,此方法是异步的。它比迭代所有样式表更可靠,因为如果在不同来源的样式表中声明动画,则后一种方法会失败。
function animationExists(animationName, callback) {
var dummy = document.createElement('dummy');
var done = function(result) {
if (dummy.parentNode) {
dummy.parentNode.removeChild(dummy);
callback(result);
}
};
var onanimstart = function() {
done(true);
};
// Animations won't be triggered until the tab is visible:
var requestAnimationFrame = window.requestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame;
requestAnimationFrame(function() {
done(false);
});
if (typeof dummy.style.animationName != 'undefined') {
dummy.style.animationName = animationName;
dummy.style.animationDuration = '0.001s';
dummy.addEventListener('animationstart', onanimstart);
} else {
dummy.style.webkitAnimationName = animationName;
dummy.style.webkitAnimationDuration = '0.001s';
dummy.addEventListener('webkitAnimationStart', onanimstart);
}
(document.body || document.documentElement).appendChild(dummy);
}
上一个功能正确检测动画是否存在于:
moz
- 前缀分支)。演示:http://jsfiddle.net/7mjSd/(显示两个警告框)。