Vuetify предоставляет широкий набор инструментов для создания
визуально привлекательных интерфейсов с плавными анимациями. Одним из
ключевых компонентов анимаций являются переходы
масштабирования, которые позволяют изменять размеры элементов с
эффектом плавного увеличения или уменьшения. В библиотеке Vuetify эти
переходы реализованы через встроенные компоненты
<v-scale-transition> и
<v-expand-transition>.
<v-scale-transition>Компонент <v-scale-transition> предназначен для
плавного изменения масштаба элемента при его появлении или исчезновении.
Он работает аналогично стандартным Vue-трансишенам, но обеспечивает
готовую анимацию увеличения и уменьшения.
Пример использования:
<template>
<v-btn @click="show = !show">Показать/Скрыть блок</v-btn>
<v-scale-transition>
<div v-if="show" class="scale-box">
Масштабируемый блок
</div>
</v-scale-transition>
</template>
<script>
export default {
data() {
return {
show: false
}
}
}
</script>
<style>
.scale-box {
width: 200px;
height: 100px;
background-color: #1976d2;
color: white;
display: flex;
justify-content: center;
align-items: center;
border-radius: 8px;
}
</style>
Ключевые моменты работы:
v-if контролирует появление или исчезновение
элемента.
<v-scale-transition> автоматически добавляет
CSS-классы для анимации:
.v-enter-from, .v-enter-to – при
появлении;.v-leave-from, .v-leave-to – при
скрытии.Переход реализуется через свойство
transform: scale(), создавая эффект увеличения или
уменьшения.
Vuetify позволяет изменять продолжительность и тайминг-функцию анимации через свойства компонента или кастомные классы.
Пример кастомной настройки:
<v-scale-transition
enter-active-class="custom-enter"
leave-active-class="custom-leave"
>
<div v-if="show" class="scale-box">Блок с кастомной анимацией</div>
</v-scale-transition>
<style>
.custom-enter {
transition: transform 0.6s cubic-bezier(0.68, -0.55, 0.27, 1.55);
}
.custom-leave {
transition: transform 0.4s ease-in-out;
}
</style>
Особенности:
transition задает длительность и кривую
анимации.Переходы масштабирования идеально подходят для работы с элементами, добавляемыми динамически в DOM, например, карточками списка или всплывающими уведомлениями.
<template>
<v-btn @click="addCard">Добавить карточку</v-btn>
<v-scale-transition-group>
<div
v-for="card in cards"
:key="card.id"
class="scale-card"
>
{{ card.text }}
</div>
</v-scale-transition-group>
</template>
<script>
export default {
data() {
return {
cards: [],
nextId: 1
}
},
methods: {
addCard() {
this.cards.push({ id: this.nextId++, text: `Карточка ${this.nextId}` });
}
}
}
</script>
<style>
.scale-card {
width: 180px;
height: 80px;
background-color: #4caf50;
margin: 8px;
border-radius: 6px;
color: white;
display: flex;
align-items: center;
justify-content: center;
}
</style>
Пояснения:
<v-scale-transition-group> работает с
коллекциями, обеспечивая плавное масштабирование при добавлении и
удалении элементов.key для
корректной анимации.Компоненты переходов масштабирования можно комбинировать с другими эффектами Vuetify, например:
v-fade-transition внутри или снаружи
<v-scale-transition> для создания эффекта
одновременного увеличения и появления.<v-slide-y-transition> для появления элемента с
масштабированием и смещением.<v-scale-transition>
<v-fade-transition>
<div v-if="show" class="combined-effect">
Комбинированная анимация
</div>
</v-fade-transition>
</v-scale-transition>
v-scale-transition-group вместо отдельных
<v-scale-transition>, чтобы минимизировать
перерисовки DOM.Переходы масштабирования в Vuetify предоставляют гибкий и мощный инструмент для создания динамичных, отзывчивых и визуально привлекательных интерфейсов, позволяя легко контролировать эффект появления и исчезновения элементов на странице.