Quasar Framework предоставляет мощный набор инструментов для работы с анимациями и переходами (transitions) в приложениях на Vue.js. Анимации позволяют улучшить пользовательский опыт, делая интерфейс более динамичным и отзывчивым. В Quasar они реализуются через встроенные компоненты, классы и директивы.
В основе работы анимаций в Quasar лежит стандарт Vue.js
<transition> и <transition-group>.
Quasar расширяет эти возможности, предлагая готовые эффекты и
утилиты.
Ключевые моменты:
v-show и v-if часто используются вместе с
переходами для плавного появления и скрытия элементов.<transition-group>.Пример базового перехода с Quasar:
<template>
<q-btn label="Показать текст" @click="visible = !visible" />
<transition name="fade">
<div v-if="visible" class="q-pa-md q-mt-md bg-primary text-white">
Плавное появление текста
</div>
</transition>
</template>
<script setup>
import { ref } from 'vue'
const visible = ref(false)
</script>
<style>
.fade-enter-active, .fade-leave-active {
transition: opacity 0.5s;
}
.fade-enter-from, .fade-leave-to {
opacity: 0;
}
</style>
Quasar предоставляет ряд готовых классов для анимаций, которые можно использовать без написания CSS:
Использование встроенных классов упрощает создание анимаций:
<q-btn label="Появить панель" @click="show = !show" />
<q-card v-show="show" class="q-pa-md slide-up-enter-active slide-up-leave-active">
Панель с анимацией slide-up
</q-card>
В этом примере slide-up-enter-active и
slide-up-leave-active — встроенные классы Quasar,
обеспечивающие плавный подъем и исчезновение карточки.
QTransitionQuasar включает компонент <q-transition> для более
тонкой настройки анимаций. Он позволяет управлять типом анимации через
проп name и предоставляет удобные события:
@before-enter – до начала анимации.@enter – при запуске анимации.@after-enter – после завершения анимации.@before-leave – перед уходом элемента.@leave – во время ухода.@after-leave – после ухода.Пример использования:
<q-transition name="fade" @before-enter="onBeforeEnter" @after-leave="onAfterLeave">
<q-banner v-if="bannerVisible" class="bg-secondary text-white">
Важное уведомление
</q-banner>
</q-transition>
<script setup>
import { ref } from 'vue'
const bannerVisible = ref(true)
function onBeforeEnter(el) {
console.log('Анимация начинается', el)
}
function onAfterLeave(el) {
console.log('Анимация завершена', el)
}
</script>
<q-transition> позволяет комбинировать стандартные
CSS-анимации и JavaScript-хуки для более сложных эффектов.
<transition-group>Для списков и коллекций элементов Quasar предоставляет
<transition-group>. Он позволяет анимировать
добавление, удаление и перемещение элементов.
<q-btn label="Добавить элемент" @click="addItem" />
<transition-group name="list" tag="div">
<q-item v-for="item in items" :key="item.id" class="q-mb-sm">
{{ item.name }}
</q-item>
</transition-group>
<script setup>
import { ref } from 'vue'
const items = ref([{ id: 1, name: 'Элемент 1' }])
function addItem() {
items.value.push({ id: Date.now(), name: `Элемент ${items.value.length + 1}` })
}
</script>
<style>
.list-enter-active, .list-leave-active {
transition: all 0.4s ease;
}
.list-enter-from, .list-leave-to {
opacity: 0;
transform: translateY(20px);
}
</style>
Эта техника позволяет создавать динамические списки с плавными появлением и исчезновением элементов.
Quasar предоставляет CSS-утилиты для анимаций и transitions:
transition-* – классы для быстрого добавления эффекта
(например, transition-fade,
transition-slide-up).animated – базовый класс для включения анимации.Пример использования утилит:
<q-card class="transition-slide-left animated q-mb-md">
Карточка с эффектом сдвига влево
</q-card>
fade +
scale, для создания более выразительных анимаций.before-enter и after-leave помогает
управлять состоянием компонентов и предотвращать конфликты
анимаций.v-show вместо v-if при частом
переключении видимости.Quasar объединяет мощь Vue.js и собственные расширения для создания
гибких, динамичных и удобных анимаций. Использование
<q-transition>, встроенных классов и утилит позволяет
реализовать плавные эффекты появления, исчезновения, сдвига,
масштабирования и вращения элементов интерфейса, обеспечивая богатый
визуальный опыт без сложной кастомной логики.