Quasar Framework предоставляет мощный набор инструментов для работы с прокруткой как на уровне страниц, так и отдельных компонентов. Контроль над прокруткой позволяет создавать динамичные интерфейсы, реализовывать ленивую загрузку, плавные переходы и улучшать пользовательский опыт.
Quasar использует собственные директивы и утилиты для работы с прокруткой. Основные подходы включают:
v-scroll Директива позволяет
отслеживать события прокрутки на любом контейнере. Синтаксис:<div v-scroll="onScroll" style="height: 300px; overflow-y: auto;">
<div v-for="i in 50" :key="i">Элемент {{ i }}</div>
</div>
export default {
methods: {
onScroll(evt) {
const scrollTop = evt.target.scrollTop;
console.log('Прокрутка: ', scrollTop);
}
}
}
Особенности:
evt.target.scrollTop — текущая вертикальная позиция
прокрутки.debounce для
оптимизации производительности.QPage и QLayout
Внутри QLayout компоненты QPage поддерживают
автоматическую прокрутку при навигации. Для программного контроля
используется метод:this.$q.pageScrollTo('#target-element', 500, () => {
console.log('Прокрутка завершена');
});
Аргументы метода:
#target-element).Quasar предоставляет утилиту $q.pageScrollTo для
плавного перемещения к конкретным позициям или элементам.
this.$q.pageScrollTo(0, 300); // Прокрутка к 300px от верхнего края
Можно использовать объект с опциями:
this.$q.pageScrollTo('#footer', {
duration: 800,
offset: 50,
easing: 'easeInOutCubic'
});
Опции:
duration — время анимации в миллисекундах.offset — смещение от целевого элемента.easing — тип плавности анимации, поддерживаются
стандартные кривые CSS.Quasar позволяет реагировать на прокрутку с помощью утилиты
scroll.setVerticalScrollPosition и прослушивания событий на
window:
import { scroll } from 'quasar';
scroll.setVerticalScrollPosition(200); // Установить прокрутку на 200px
window.addEventListener('scroll', () => {
const pos = scroll.getVerticalScrollPosition();
console.log('Текущая позиция: ', pos);
});
Методы scroll объекта:
getVerticalScrollPosition() — возвращает текущую
вертикальную позицию.setVerticalScrollPosition(position: number) —
устанавливает позицию прокрутки.scrollToElement(element, duration, offset) — прокрутка
к конкретному элементу с опциями.Для длинных списков и таблиц важна оптимизация прокрутки. Quasar
предлагает компонент QInfiniteScroll:
<q-infinite-scroll
:handler="loadMore"
:offset="100"
>
<div v-for="item in items" :key="item.id">{{ item.text }}</div>
</q-infinite-scroll>
export default {
data() {
return { items: [] };
},
methods: {
loadMore(done) {
fetch('/api/data')
.then(res => res.json())
.then(data => {
this.items.push(...data);
done(); // сообщает компоненту, что загрузка завершена
});
}
}
}
Особенности QInfiniteScroll:
offset — расстояние от низа контейнера, при котором
срабатывает загрузка.done() обязателен для продолжения отслеживания
событий прокрутки.Компонент QScrollObserver позволяет отслеживать
видимость элементов:
<q-scroll-observer @scroll="onScroll">
<div id="animated-block">Контент для анимации</div>
</q-scroll-observer>
methods: {
onScroll({ position, direction }) {
if (position > 200) {
// Запуск анимации или подгрузки
}
}
}
Параметры события:
position — текущая вертикальная позиция прокрутки.direction — направление прокрутки (up или
down).Для оптимизации при большом объёме элементов:
v-scroll с debounce.QInfiniteScroll с виртуализацией через
сторонние библиотеки.Quasar поддерживает фиксацию элементов через
position: sticky в сочетании с прокруткой. Для плавной
навигации можно комбинировать QToolbar и
$q.pageScrollTo:
<q-toolbar position="sticky">
<q-btn @click="$q.pageScrollTo('#section1', 600)">Раздел 1</q-btn>
</q-toolbar>
Эта связка позволяет создавать динамичные меню и навигационные панели, которые остаются на виду при прокрутке и плавно перемещают пользователя к нужному разделу.
Quasar предоставляет полный инструментарий для гибкого и производительного управления прокруткой, от базовых событий до сложной навигации с анимацией и ленивой загрузкой. Такой подход позволяет создавать современные интерфейсы с высокой отзывчивостью и удобством для пользователя.