QScrollArea — это компонент библиотеки Quasar Framework, предназначенный для создания области с прокручиваемым контентом. Он обеспечивает гибкую и кроссбраузерную прокрутку, а также возможность кастомизации внешнего вида скроллбаров. QScrollArea особенно полезен для интерфейсов с ограниченной областью отображения, где содержимое превышает доступное пространство.
Основные возможности:
<template>
<q-scroll-area style="height: 300px;">
<div class="content">
<p>Длинный контент...</p>
</div>
</q-scroll-area>
</template>
style="height: 300px;" — обязательный параметр,
задающий высоту области. Без него прокрутка не будет активирована.<div class="content">
содержит контент, который необходимо прокручивать.Свойство scrollbar определяет поведение скроллбаров:
auto — прокрутка появляется только при
необходимости.always — скроллбар всегда видим.never — скроллбар скрыт, прокрутка возможна с помощью
колесика мыши или жестов.Пример использования:
<q-scroll-area scrollbar="always" style="height: 400px;">
<div class="content">
<p>Большой блок контента...</p>
</div>
</q-scroll-area>
По умолчанию QScrollArea поддерживает обе оси. Для ограничения прокрутки можно использовать свойства horizontal и vertical:
<q-scroll-area vertical>
<div style="width: 600px; height: 1200px;">
<p>Контент с вертикальной прокруткой</p>
</div>
</q-scroll-area>
vertical — включает только вертикальную прокрутку.horizontal — включает только горизонтальную
прокрутку.QScrollArea предоставляет возможность полной кастомизации скроллбаров через слоты thumb и track.
Пример изменения цвета и формы скроллбара:
<q-scroll-area style="height: 300px;">
<template v-slot:thumb>
<div class="custom-thumb"></div>
</template>
<template v-slot:track>
<div class="custom-track"></div>
</template>
<div class="content">
<p>Длинный контент...</p>
</div>
</q-scroll-area>
CSS:
.custom-thumb {
background-color: #42a5f5;
border-radius: 6px;
}
.custom-track {
background-color: #e0e0e0;
border-radius: 6px;
}
QScrollArea позволяет программно управлять положением скролла с
помощью методов setScrollPosition,
getScrollPosition и событий @scroll:
<q-scroll-area ref="scrollArea" style="height: 300px;">
<div class="content">
<p>Контент для прокрутки</p>
</div>
</q-scroll-area>
<script>
export default {
methods: {
scrollToTop() {
this.$refs.scrollArea.setScrollPosition({ top: 0, left: 0 });
},
getCurrentScroll() {
const pos = this.$refs.scrollArea.getScrollPosition();
console.log(pos);
}
}
}
</script>
setScrollPosition({ top, left }) — устанавливает
положение прокрутки.getScrollPosition() — возвращает текущее положение в
формате { top, left }.@scroll позволяет отслеживать движение скролла
для динамических эффектов или загрузки данных.QScrollArea корректно работает с контентом, который динамически
изменяет размеры, например, списками с виртуальной прокруткой. Для
обновления скроллбара после изменения контента используется метод
update:
this.$refs.scrollArea.update();
Это гарантирует, что скроллбар будет адаптирован к новым размерам содержимого.
QVirtualScroll) для оптимизации
производительности.QScrollArea обеспечивает гибкий, настраиваемый механизм прокрутки, который можно адаптировать под любую задачу интерфейса, сохраняя при этом стиль и плавность взаимодействия.