跳到主要内容

useResizeObserver

分类
导出大小
500 B
上次更改
8 个月前

报告元素内容或边框尺寸的变化

演示

调整盒子大小以查看变化

用法

vue
<script setup lang="ts">
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-observ
er="
onResizeObserver
">
{{
text
}}
</
div
>
</template>

ResizeObserver MDN

类型声明

显示类型声明
ts
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.org.cn/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
>

来源

源代码演示文档

贡献者

Anthony Fu
Anthony Fu
青椒肉丝
IlyaL
Jelf
IlyaL
Hongkun
远方os
birdxiao
acyza
ByMykel
vaakian X
karma
Shinigami
Alex Kozack
Jacob Clevenger
Sanxiaozhizi
Antério Vieira
zhong666

更新日志

8c521 - feat(components)!: 重构组件并使其保持一致 (#4912)
v12.8.0
7432f - feat(types): 废弃 MaybeRefMaybeRefOrGetter,转而使用 Vue 的原生类型 (#4636)
v12.3.0
59f75 - feat(toValue): 废弃 @vueuse/shared 中的 toValue,转而使用 Vue 的原生函数
0a9ed - feat!: 放弃对 Vue 2 的支持,优化打包并清理 (#4349)
v11.1.0
044dd - fix: 更新类型 (#4218)
d4310 - feat: 添加了 vResizeObserver 指令 (#4008)
1c124 - fix: 修复 target 是 Ref 数组的问题 (#4005)
v10.8.0
48421 - fix: 避免深度监听以避免循环调用 (#3753)

根据 MIT 许可证发布。