В библиотеке Vuetify анимации появления элементов
управляются через механизм переходов (transitions). Эти
переходы позволяют создавать плавное появление и исчезновение
компонентов, улучшая визуальную динамику интерфейса. Vuetify
предоставляет встроенные переходы, а также возможность создания
собственных.
<transition>В основе работы анимаций лежит стандартный Vue-компонент
<transition>. Он оборачивает элемент или компонент и
применяет к нему CSS-классы для различных этапов анимации:
<template>
<transition name="fade">
<v-btn v-if="showButton">Нажми меня</v-btn>
</transition>
</template>
<script>
export default {
data() {
return {
showButton: false
};
}
};
</script>
<style>
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s ease;
}
.fade-enter-from, .fade-leave-to {
opacity: 0;
}
.fade-enter-to, .fade-leave-from {
opacity: 1;
}
</style>
Ключевые моменты:
.fade-enter-from – начальное состояние при
появлении.fade-enter-to – конечное состояние при появлении.fade-leave-from – начальное состояние при
исчезновении.fade-leave-to – конечное состояние при
исчезновении.fade-enter-active и .fade-leave-active –
применяются на протяжении всей анимацииVuetify поставляется с набором готовых переходов, которые упрощают задачу:
v-fade-transition – плавное появление с изменением
прозрачностиv-scale-transition – масштабирование при
появлении/исчезновенииv-slide-x-transition /
v-slide-y-transition – сдвиг по горизонтали или
вертикалиv-expand-transition – изменение размера по высоте,
полезно для раскрывающихся блоковПример использования встроенного перехода:
<template>
<v-fade-transition>
<v-card v-if="showCard" class="pa-4">
Контент карточки
</v-card>
</v-fade-transition>
</template>
<script>
export default {
data() {
return {
showCard: true
};
}
};
</script>
Vuetify позволяет создавать собственные переходы с помощью компонента
<v-expand-transition> или базового
<transition> с кастомными классами. Это дает полный
контроль над анимацией.
Пример пользовательского масштабирования:
<template>
<transition name="scale-up">
<v-alert v-if="showAlert" type="success">Успешная операция</v-alert>
</transition>
</template>
<style>
.scale-up-enter-active {
transition: transform 0.3s ease, opacity 0.3s ease;
}
.scale-up-leave-active {
transition: transform 0.3s ease, opacity 0.3s ease;
}
.scale-up-enter-from {
transform: scale(0.8);
opacity: 0;
}
.scale-up-enter-to {
transform: scale(1);
opacity: 1;
}
.scale-up-leave-from {
transform: scale(1);
opacity: 1;
}
.scale-up-leave-to {
transform: scale(0.8);
opacity: 0;
}
</style>
Для списков и повторяющихся компонентов применяется
<transition-group>. Он поддерживает анимацию
появления, исчезновения и перемещения элементов:
<template>
<transition-group name="list-fade" tag="div">
<v-chip
v-for="item in items"
:key="item.id"
class="ma-2"
>
{{ item.text }}
</v-chip>
</transition-group>
</template>
<style>
.list-fade-enter-active, .list-fade-leave-active {
transition: all 0.5s ease;
}
.list-fade-enter-from, .list-fade-leave-to {
opacity: 0;
transform: translateY(20px);
}
.list-fade-enter-to, .list-fade-leave-from {
opacity: 1;
transform: translateY(0);
}
</style>
Особенности:
tag="div" задает контейнер для группы элементовkeyСвойство mode у <transition>
позволяет контролировать порядок анимаций при замене элементов:
in-out – сначала анимация входа, затем выходout-in – сначала анимация выхода, затем вход<transition name="fade" mode="out-in">
<component :is="currentComponent" />
</transition>
duration можно задавать как через CSS
(transition-duration), так и через JS-хуки для более
сложной логики.
Использование переходов появления в Vuetify позволяет:
Грамотное применение встроенных и кастомных переходов делает интерфейсы более живыми и приятными для пользователя, поддерживая современные стандарты UX.