我一直在为 iPad 应用程序创建许多小型胖客户端 JavaScript 应用程序,它在 UIWebview 中加载相关应用程序。我现在让它们跨浏览器,并且需要使用 JavaScript 为 CSS 动画和过渡合并一些后备。
我的 webkit 特定实现对所有动画/过渡使用 CSS 类,其开始和结束状态在设计时是已知的,使用 javascript 中的添加/删除类并利用相关的 webkitTransitionEnd/webkitAnimationEnd 事件。
对于“动态”过渡,我有一个简单的“动画”功能,它只是将样式属性应用于相关元素。
我想通过简单的添加/删除类等保持用于应用转换的内部 API 与当前实现尽可能相似。我通常有一个应用程序的 CSS 和 js 文件(均已缩小)。
所以有几个问题/点,我会很感激任何输入:
IE7/8 问题 - IE9.js
动态添加供应商特定的前缀 - 到目前为止发现'jquery.css3finalize'。
过渡到一个类:'jquery.animateToClass' - 似乎每次应用一个类时都会搜索样式表 - 是否应该在进一步查找时缓存相关类?这是否缓慢/资源匮乏?
对于“@keyframe”动画:我想要每个 CSS3 动画的关键帧的 javascript 对象“表示”。因此,将一个类传递给“doAnimationWithClass”函数将使用正常的 css3 动画(如果在浏览器中可用),但如果没有,它会将“对象版本”传递给一个函数,该函数将使用 css3 转换(如果可用)链接每个关键帧转换或jQuery.animate(或等效),最终达到相同的结果。
例如:
CSS:
@-webkit-keyframes an-animation {
0% { opacity: 0; }
50% { opacity: 1; }
100% { opacity: 0; }
}
.an-animation {
-webkit-animation-name: an-animation;
-webkit-animation-duration: 1s;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: 2;
}
JS:
var animations = {
an-animation: {
keyframes: [
{
duration: '',
timing: 'linear',
props: {
opacity: 0
}
},
{
duration: '0.5s',
timing: 'linear',
props: {
opacity: 1
}
},
{
duration: '0.5s',
timing: 'linear',
props: {
opacity: 0
}
}
]
}
};
var animationClasses = [
an-animation: {
name: 'an-animation';
duration: '1s';
timing: 'linear';
count: 2;
}
];
function doAnimationWithClass(className) {
if (modernizer.cssanimations) {
//normal implementation
}
else {
//lookup class in animationclasses
//lookup relevant animation object in animationHash
//pass to animation chaining function
}
}
AnimationHash 等的创建可以在客户端完成,或者只是在设计时创建(使用批处理/构建文件)。
任何对已经以更明智的方式执行此操作的库的想法或指针都将不胜感激。