Компонент v-resize используется для
отслеживания изменений размеров элементов или окна браузера и
реагирования на них. Он позволяет создавать адаптивные интерфейсы без
необходимости вручную подписываться на события resize в
JavaScript.
disabled – отключает отслеживание
изменений размеров. При значении true компонент не будет
генерировать события изменения размера.debounce – задержка перед вызовом
обработчика при изменении размера. Значение указывается в миллисекундах.
Полезно для оптимизации производительности при частых изменениях
размеров.tag – определяет HTML-тег, который
будет использоваться для обертки содержимого. По умолчанию используется
div.observeParents – позволяет отслеживать
изменения размеров родительских элементов. При значении
true v-resize будет реагировать не только на
собственные размеры, но и на размеры контейнера.@resize – генерируется каждый раз
при изменении размеров компонента. Аргумент события содержит объект:
{
width: <текущая ширина>,
height: <текущая высота>
}
Это позволяет динамически изменять отображение или адаптировать компоненты под новые размеры.
<template>
<v-resize @resize="onResize">
<div :style="{ width: containerWidth + 'px', height: containerHeight + 'px' }">
Контент с адаптивной шириной и высотой
</div>
</v-resize>
</template>
<script>
export default {
data() {
return {
containerWidth: 300,
containerHeight: 200,
}
},
methods: {
onResize({ width, height }) {
this.containerWidth = width;
this.containerHeight = height;
}
}
}
</script>
В этом примере размеры блока обновляются автоматически при изменении размера окна или родительского контейнера.
debounce для оптимизацииПри работе с большим количеством компонентов или сложными
вычислениями желательно использовать свойство debounce для
предотвращения слишком частых вызовов:
<v-resize :debounce="200" @resize="onResize">
<div>
Изменяемый контент
</div>
</v-resize>
Здесь обработчик onResize будет вызываться не чаще
одного раза каждые 200 миллисекунд, что снижает нагрузку на браузер.
Если компонент должен реагировать на изменение размеров контейнера,
используется свойство observeParents:
<v-resize :observe-parents="true" @resize="onResize">
<div>
Контент адаптируется к родительскому контейнеру
</div>
</v-resize>
В этом случае изменение размеров родительского блока также вызывает
событие @resize.
Свойство tag позволяет изменить оборачивающий
HTML-элемент без необходимости менять разметку:
<v-resize tag="section" @resize="onResize">
<p>Контент внутри секции</p>
</v-resize>
Это удобно при интеграции с семантической разметкой и соблюдении стандартов HTML.
v-resize легко интегрируется с другими компонентами
Vuetify, такими как v-card, v-container или
v-layout. Например, можно отслеживать размеры карточки и
динамически изменять содержимое:
<v-card>
<v-resize @resize="onCardResize">
<v-card-text>
Ширина карточки: {{ width }}px, высота: {{ height }}px
</v-card-text>
</v-resize>
</v-card>
<script>
export default {
data() {
return {
width: 0,
height: 0
}
},
methods: {
onCardResize({ width, height }) {
this.width = width;
this.height = height;
}
}
}
</script>
debounce для сложных интерфейсов с
множеством компонентов.observeParents, если элемент находится внутри
динамически изменяющегося контейнера.data или computed,
чтобы использовать их для адаптивного рендеринга других элементов.v-resize для постоянного измерения
размеров при высокой частоте изменений без debounce, чтобы
избежать нагрузки на DOM.v-resize — мощный инструмент для
отслеживания размеров компонентов и контейнеров в реальном времени. Он
упрощает создание адаптивных интерфейсов, позволяя разработчикам
сосредоточиться на логике отображения, а не на ручной обработке событий
изменения размеров.
Эффективное использование debounce,
observeParents и динамических тегов позволяет создавать
гибкие, оптимизированные и семантически корректные интерфейсы на базе
Vuetify.