0
Я обычно просто в css вешаю transition на элемент, а в js по клику меняю нужные свойства или классы — всё анимируется само. Если transition должен появляться именно по клику (до этого его нет), то через js добавляю transition, а потом в requestAnimationFrame меняю стили, чтобы браузер зафиксировал начальное состояние и анимация сработала.