@voxman90

Как добавить классы так, чтобы они были обработаны браузером по отдельности?

Сниппет с фидла:


Силами CSS создана простая анимация из двух шагов. Классы right и center по очереди меняют свойство transform: translateX. Добавление класса center обёрнуто в setTimeout(callback, 0).

Проблема в том, что применение setTimeout(callback, 0) не гарантирует, что классы будут применены по отдельности. Если повторять анимацию, то рано или поздно между добавлением первого и второго класса не произойдёт Recalculate Style в браузере и анимация вообще не начнётся.

Вопрос в том, как добиться того, чтобы браузер запускал Recalculate Style между присвоением этих классов? Увеличить таймер в setTimeout?

Вопрос не о том, как можно сделать эту анимацию другими путями.
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
@voxman90 Автор вопроса
Для того, чтобы форсировать Recalculate Style между присвоением классов достаточно обратиться к свойству изменяемого элемента offsetHeight или $(elem).outerHeight() (для jQuery).
Это убирает необходимость использовать костыли в виде setTimeout в сниппете выше.

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Классы у вас не меняют друг друга, а просто устанавливаются. В результате, после второго вызова addClass установлены оба класса и больше ничего не меняется.
А для отслеживания transition есть набор событий. https://developer.mozilla.org/en-US/docs/Web/API/H...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект