import { ref, watch, onMounted, nextTick } from 'vue' export const useOverflow = (elementRef, dataRef) => { // 根据 elementRef 类型来初始化 isOverflow const isOverflow = Array.isArray(elementRef.value) ? ref([]) : ref(false) const checkOverflow = (element) => { if (element) { return element.scrollWidth > element.clientWidth } return false } // 用于处理单个或多个元素的溢出检查 const updateOverflowStatus = () => { if (Array.isArray(elementRef.value)) { // 如果是数组,检查每个元素 isOverflow.value = elementRef.value.map((el) => checkOverflow(el)) } else { // 如果是单个元素,直接返回布尔值 isOverflow.value = checkOverflow(elementRef.value) } } // 初次 mounted 时检查是否溢出 onMounted(() => { nextTick(() => { updateOverflowStatus() }) }) // 监听数据变化,更新溢出状态 watch( () => dataRef, () => { nextTick(() => { updateOverflowStatus() }) }, { deep: true, immediate: true } ) return { isOverflow } }