Я пытаюсь анимировать список элементов, которые будут вставляться один за другим при отображении на странице.
Все работает хорошо в Chrome и Firefox, даже в Safari 11 работает хорошо, но safari 12 плохо справляется с анимацией.
Как показано на следующем изображении, все элементы должны быть выровнены по верхнему краю после завершения анимации, но по какой-то причине только в Safari 12 элементы отображаются случайным образом. Кроме того, наведение указателя мыши на кнопку выключено.
Вы можете взглянуть на проблему здесь: https://codepen.io/crysfel/pen/GwoQxE (обязательно откройте ссылку с помощью safari 12)
Я думаю, что css довольно стандартный:
@keyframes slideIn {
from {
opacity: 0;
transform: translateY(60px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.slide-in {
opacity:0;
transform: translateY(60px);
animation: slideIn ease 1;
animation-fill-mode: forwards;
animation-duration: 175ms;
}
И простой javascript для анимации элементов один за другим:
function animateIn() {
$('ul li').each(function(index) {
$(this).removeClass('slide-in');
setTimeout(() => {
$(this).addClass('slide-in');
}, 50 * index)
})
}
$(() => {
animateIn();
$('#show').click(function() {
animateIn();
});
});
Обновлено:
Я исправил проблему: Оказывается, все, что мне нужно было сделать, это удалить transform: translateY(60px); из slide-in. Очевидно, сафари использовал этот стиль в конце анимации, перезаписывая окончательное значение. Это очень странно, потому что визуально выглядит неправильно, но активные зоны и все в порядке.
Да!! Оказывается, все, что мне нужно было сделать, это удалить transform: translateY(60px); из slide-in. Очевидно, сафари использовал этот стиль в конце анимации, перезаписывая окончательное значение. Это очень странно, потому что визуально выглядит неправильно, но активные зоны и все в порядке.
Потрясающие!! Спасибо @Crysfel, что исправил мою проблему.
Это действительно странное исправление, потому что в animation-fill-mode: forwards должен был применяться стиль от вашего до в конце анимации ... Интересно, есть ли в Safari 12 проблема с режимом анимации-заливки?
Правильно, должно! И он применяет правильные стили в Chrome, Firefox и даже Safari 11. Это ошибка только в Safary 12.
Да, это определенно ошибка Safari. Предполагается, что окончательные стили анимации должны оставаться в силе, это своего рода важный компонент их работы. Я действительно очень удивлен, что они выпустили эту регрессию.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Возможно, вам понадобится добавить префикс к ключевым кадрам и анимации для сафари. Используйте что-то вроде этого:
@keyframes slideIn {
from {
opacity: 0;
transform: translateY(60px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@-webkit-keyframes slideIn {
from {
opacity: 0;
-webkit-transform: translateY(60px);
}
to {
opacity: 1;
-webkit-transform: translateY(0);
}
}
.slide-in {
opacity:0;
transform: translateY(60px);
-webkit-transform: translateY(60px);
animation: slideIn ease 1;
-webskit-animation: slideIn ease 1;
animation-fill-mode: forwards;
-webkit-animation-fill-mode: forwards;
animation-duration: 175ms;
-webkit-animation-duration: 175ms;
}
Полезный инструмент - shouldiprefix.com
Спасибо! Но Safari 12 уже поддерживает все приведенные выше css, проблема в другом :(
Привет, @Crysfel, вы нашли решение этой проблемы? В настоящее время тоже пытаюсь это исправить.