Я создал несколько небольших приложений JavaScript для толстого клиента для приложения iPad, которое загружает соответствующее приложение в UIWebview. Сейчас я делаю их кроссбраузерными, и мне нужно включить некоторые резервные варианты для CSS-анимации и переходов с использованием JavaScript.
Моя конкретная реализация webkit использует классы CSS для всех анимаций / переходов, для которых начальное и конечное состояния известны во время разработки, с использованием класса добавления / удаления в javascript и использования соответствующих событий webkitTransitionEnd / webkitAnimationEnd.
Для «динамических» переходов у меня есть простая функция «анимация», которая просто применяет свойства стиля к соответствующим элементам.
Я хотел бы сохранить внутренний API для применения переходов как можно более похожим на текущую реализацию путем простого добавления / удаления классов и т. Д. Обычно у меня есть файлы CSS и js (оба уменьшены) для приложения.
Итак, несколько вопросов / моментов, по которым я был бы признателен за любой вклад:
Проблемы с IE7 / 8 - IE9.js
Динамическое добавление префиксов производителя - пока найдено jquery.css3finalize.
Переход к классу: 'jquery.animateToClass' - кажется, ищет таблицу (ы) стилей каждый раз, когда класс применяется - должны ли соответствующие классы кэшироваться при дальнейших поисках? Это медленный / ресурсоемкий?
Для анимации «@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
}
}
The creation of animationHash etc could be done client side, or simply created at design time (with a batch/build file).
Приветствуются любые мысли или указатели на библиотеку, которая уже делает это более разумным способом.