Vue 类库 Vueuse 的 useElementBounding 可以获取html元素的边界,并返回响应式对象,该对象返回了宽、高以及位置信息。
<template>
<!--元素对象-->
<div ref="el" />
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { useElementBounding } from '@vueuse/core'
export default {
setup() {
//元素对象
const el = ref(null);
//元素对象的Bounding信息
const { x, y, top, right, bottom, left, width, height } = useElementBounding(el)
return {
el,
/* ... */
}
}
}
</script>
<UseElementBounding v-slot="{ width, left }">
Width: {{ width }}
Left: {{ left }}
</UseElementBounding>
例子
export interface UseElementBoundingOptions {
/**
* 组件卸载时所有值返回0
*
* @default true
*/
reset?: boolean
/**
* 监听 window resize event
*
* @default true
*/
windowResize?: boolean
/**
* 监听 window scroll 事件
*
* @default true
*/
windowScroll?: boolean
/**
* 当元素更新时是否立即响应
*
* @default true
*/
immediate?: boolean
}
/**
* Reactive bounding box of an HTML element.
*
* @see https://vueuse.org/useElementBounding
* @param target
*/
export declare function useElementBounding(
target: MaybeComputedElementRef,
options?: UseElementBoundingOptions
): {
height: Ref<number>
bottom: Ref<number>
left: Ref<number>
right: Ref<number>
top: Ref<number>
width: Ref<number>
x: Ref<number>
y: Ref<number>
update: () => void
}
export type UseElementBoundingReturn = ReturnType<typeof useElementBounding>