跳到主要内容

useElementBounding

分类
导出大小
1.31 kB
上次更改
8 个月前

HTML 元素的响应式边界框

演示

调整盒子大小以查看变化

用法

vue
<script setup lang="ts">
import { 
useElementBounding
} from '@vueuse/core'
import {
useTemplateRef
} from 'vue'
const
el
=
useTemplateRef
('el')
const {
x
,
y
,
top
,
right
,
bottom
,
left
,
width
,
height
} =
useElementBounding
(
el
)
</script> <template> <
div
ref
="
el
" />
</template>

组件用法

此函数还通过 @vueuse/components 包提供了一个无渲染组件版本。了解更多用法

vue
<template>
  <UseElementBounding v-slot="{ 
width
,
height
}">
Width: {{
width
}} Height: {{
height
}}
</UseElementBounding> </template>

指令用法

此函数还通过 @vueuse/components 包提供了一个指令版本。了解更多用法

vue
<script setup lang="ts">
import { 
vElementBounding
} from '@vueuse/components'
interface BoundingType {
height
: number
bottom
: number
left
: number
right
: number
top
: number
width
: number
x
: number
y
: number
} function
onBounding
({
height
,
bottom
,
left
,
right
,
top
,
width
,
x
,
y
}: BoundingType) {
console
.
log
(
height
,
bottom
,
left
,
right
,
top
,
width
,
x
,
y
)
} const
options
= {
reset
: true,
windowResize
: true,
windowScroll
: true,
immediate
: true,
updateTiming
: 'sync',
} </script> <template> <
textarea
v-element-boundi
ng="
onBounding
" />
<!-- with options --> <
textarea
v-element-boundi
ng="
[
onBounding
,
options
]
" />
</template>

类型声明

显示类型声明
ts
export interface UseElementBoundingOptions {
  /**
   * Reset values to 0 on component unmounted
   *
   * @default true
   */
  
reset
?: boolean
/** * Listen to window resize event * * @default true */
windowResize
?: boolean
/** * Listen to window scroll event * * @default true */
windowScroll
?: boolean
/** * Immediately call update on component mounted * * @default true */
immediate
?: boolean
/** * Timing to recalculate the bounding box * * Setting to `next-frame` can be useful when using this together with something like {@link useBreakpoints} * and therefore the layout (which influences the bounding box of the observed element) is not updated on the current tick. * * @default 'sync' */
updateTiming
?: "sync" | "next-frame"
} /** * Reactive bounding box of an HTML element. * * @see https://vueuse.org.cn/useElementBounding * @param target */ export declare function
useElementBounding
(
target
:
MaybeComputedElementRef
,
options
?: UseElementBoundingOptions,
): {
height
:
ShallowRef
<number, number>
bottom
:
ShallowRef
<number, number>
left
:
ShallowRef
<number, number>
right
:
ShallowRef
<number, number>
top
:
ShallowRef
<number, number>
width
:
ShallowRef
<number, number>
x
:
ShallowRef
<number, number>
y
:
ShallowRef
<number, number>
update
: () => void
} export type
UseElementBoundingReturn
=
ReturnType
<typeof
useElementBounding
>

来源

源码示例文档

贡献者

Anthony Fu
Anthony Fu
Jelf
青椒肉丝
wheat
NoiseFan
IlyaL
Robin
IlyaL
Robin
Jonas Schade
huiliangShen
vaakian X
Ducz01
hsyq
Hebilicious
webfansplz
Ciro Lo Sapio
Shinigami
Alex Kozack

更新日志

8c521 - feat(components)!: 重构组件并使其保持一致 (#4912)
v12.3.0
67a9c - feat: 添加了 vElementBounding 指令 (#4436)
0a9ed - feat!: 放弃对 Vue 2 的支持,优化打包并清理 (#4349)
0fa17 - feat: 添加 updateTiming 选项 (#3869)
v10.7.1
70dbd - fix: 通过 css 或 style 触发 (#3664)

根据 MIT 许可证发布。