useResizeObserver
報告元素內容或邊框盒尺寸的變更
示範
調整方框大小以查看變更
用法
vue
<script setup>
import { useResizeObserver } from '@vueuse/core'
import { ref, useTemplateRef } from 'vue'
const el = useTemplateRef('el')
const text = ref('')
useResizeObserver(el, (entries) => {
const entry = entries[0]
const { width, height } = entry.contentRect
text.value = `width: ${width}, height: ${height}`
})
</script>
<template>
<div ref="el">
{{ text }}
</div>
</template>
指令用法
此函式也透過
@vueuse/components
套件提供指令版本。瞭解更多關於用法的資訊。
vue
<script setup lang="ts">
import { vResizeObserver } from '@vueuse/components'
const text = ref('')
function onResizeObserver(entries) {
const [entry] = entries
const { width, height } = entry.contentRect
text.value = `width: ${width}, height: ${height}`
}
</script>
<template>
<div v-resize-observer="onResizeObserver">
{{ text }}
</div>
</template>
類型宣告
顯示類型宣告
typescript
export interface ResizeObserverSize {
readonly inlineSize: number
readonly blockSize: number
}
export interface ResizeObserverEntry {
readonly target: Element
readonly contentRect: DOMRectReadOnly
readonly borderBoxSize: ReadonlyArray<ResizeObserverSize>
readonly contentBoxSize: ReadonlyArray<ResizeObserverSize>
readonly devicePixelContentBoxSize: ReadonlyArray<ResizeObserverSize>
}
export type ResizeObserverCallback = (
entries: ReadonlyArray<ResizeObserverEntry>,
observer: ResizeObserver,
) => void
export interface UseResizeObserverOptions extends ConfigurableWindow {
/**
* Sets which box model the observer will observe changes to. Possible values
* are `content-box` (the default), `border-box` and `device-pixel-content-box`.
*
* @default 'content-box'
*/
box?: ResizeObserverBoxOptions
}
declare class ResizeObserver {
constructor(callback: ResizeObserverCallback)
disconnect(): void
observe(target: Element, options?: UseResizeObserverOptions): void
unobserve(target: Element): void
}
/**
* Reports changes to the dimensions of an Element's content or the border-box
*
* @see https://vueuse.dev.org.tw/useResizeObserver
* @param target
* @param callback
* @param options
*/
export declare function useResizeObserver(
target:
| MaybeComputedElementRef
| MaybeComputedElementRef[]
| MaybeRefOrGetter<MaybeElement[]>,
callback: ResizeObserverCallback,
options?: UseResizeObserverOptions,
): {
isSupported: ComputedRef<boolean>
stop: () => void
}
export type UseResizeObserverReturn = ReturnType<typeof useResizeObserver>
原始碼
貢獻者
更新日誌
v12.8.0
於 2025/3/5v12.3.0
於 2025/1/259f75
- feat(toValue): 棄用來自 @vueuse/shared
的 toValue
,改用 Vue 的原生方法v12.0.0-beta.1
於 2024/11/21v11.1.0
於 2024/9/16v11.0.0-beta.2
於 2024/7/17v10.8.0
於 2024/2/20v10.0.0-beta.2
於 2023/3/28