Я создавал несколько небольших толстых клиентских приложений JavaScript для приложения iPad, которое загружает соответствующее приложение в UIWebview. Сейчас я делаю их кроссбраузерными, и мне нужно включить некоторые резервные варианты для анимации CSS и переходов с использованием JavaScript.
Моя конкретная реализация webkit использует классы CSS для всех анимаций / переходов, для которых начальное и конечное состояния известны во время разработки, - кажется, ищет таблицу (ы) стилей каждый раз, когда класс применяется - должны ли соответствующие классы кэшироваться при дальнейших поисках? Это медленный / ресурсоемкий?
Для анимации '@keyframe': я хотел бы иметь "представление" объекта javascript ключевых кадров каждой анимации CSS3. Поэтому при передаче класса функции 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 и т. д. может быть выполнено на стороне клиента или просто создано на время разработки (с пакетным файлом / файлом сборки).
Приветствуются любые мысли или указатели на библиотеку, которая уже делает это более разумным способом.