useDisplay — это Composition API-хук, предоставляемый
библиотекой Vuetify, который позволяет отслеживать текущие параметры
дисплея, такие как размер экрана, ориентация устройства и видимость
определённых брейкпоинтов. Он особенно полезен для адаптивного дизайна и
динамического управления компонентами в зависимости от ширины окна.
Для начала useDisplay необходимо импортировать из пакета
vuetify:
import { useDisplay } from 'vuetify';
После этого создаётся экземпляр хука внутри функции
setup:
export default {
setup() {
const display = useDisplay();
return { display };
}
}
display становится реактивным объектом с набором
свойств, которые автоматически обновляются при изменении размеров окна
или ориентации устройства.
useDisplaymobile Булевое значение,
указывающее, является ли текущее устройство мобильным. По умолчанию
возвращает true для экранов меньше 600px.
xs, sm, md,
lg, xl Булевы значения,
соответствующие стандартным брейкпоинтам Vuetify:
xs: < 600pxsm: 600–960pxmd: 960–1264pxlg: 1264–1904pxxl: > 1904pxМожно использовать для условного рендеринга компонентов:
<template>
<v-btn v-if="display.md">Средний и большие экраны</v-btn>
</template>name Строка, возвращающая текущий
брейкпоинт ('xs', 'sm', 'md',
'lg', 'xl'). Это удобно для динамического
определения текущего размера экрана в логике приложения.
height и width
Реактивные числовые значения, отражающие текущую высоту и ширину окна
браузера.
mobileBreakpoint Позволяет
переопределить стандартный порог, по которому определяется мобильное
устройство:
const display = useDisplay({ mobileBreakpoint: 800 });useDisplay облегчает адаптивное управление компонентами.
Например, можно скрывать меню на мобильных устройствах:
<template>
<v-navigation-drawer v-if="!display.mobile">
Меню для ПК
</v-navigation-drawer>
</template>
Или отображать специальные уведомления для маленьких экранов:
<template>
<v-alert v-if="display.xs">
Оптимизировано для мобильного просмотра
</v-alert>
</template>
useDisplay предоставляет информацию о текущей ориентации
экрана:
landscape — true, если
экран горизонтальныйportrait — true, если
экран вертикальныйПример условного рендеринга на основе ориентации:
<template>
<div>
<p v-if="display.landscape">Горизонтальная ориентация</p>
<p v-else>Вертикальная ориентация</p>
</div>
</template>
Все свойства useDisplay являются реактивными. Изменение
размера окна автоматически обновляет значения:
watch(() => display.width, (newWidth) => {
console.log(`Новая ширина окна: ${newWidth}px`);
});
Это позволяет динамически адаптировать стили и поведение компонентов
без использования сторонних библиотек или ручной обработки событий
resize.
Использование useDisplay совместно с вычисляемыми
свойствами позволяет легко управлять стилями компонентов:
const buttonSize = computed(() => {
if (display.sm || display.xs) return 'small';
if (display.md) return 'medium';
return 'large';
});
<v-btn :size="buttonSize">Адаптивная кнопка</v-btn>
<template>
<v-container>
<v-row>
<v-col cols="12" md="6">
<v-card v-if="display.md">
Контент для средних и больших экранов
</v-card>
</v-col>
<v-col cols="12" md="6">
<v-alert v-if="display.xs || display.sm">
Контент для маленьких экранов
</v-alert>
</v-col>
</v-row>
</v-container>
</template>
<script>
import { useDisplay } from 'vuetify';
import { computed } from 'vue';
export default {
setup() {
const display = useDisplay();
const isSmallScreen = computed(() => display.xs || display.sm);
return { display, isSmallScreen };
}
}
</script>
В этом примере элементы интерфейса изменяют своё поведение и видимость в зависимости от брейкпоинтов и размеров экрана.
useDisplay может использоваться с пользовательскими
брейкпоинтами, задаваемыми через объект конфигурации Vuetify:
const vuetify = createVuetify({
display: {
thresholds: {
xs: 0,
sm: 500,
md: 900,
lg: 1400,
xl: 1800
},
mobileBreakpoint: 500
}
});
Это позволяет адаптировать интерфейс под нестандартные устройства и экраны.
useDisplay обеспечивает:
Это делает useDisplay мощным инструментом для реализации
адаптивных интерфейсов в проектах на Vuetify.