useOverflow.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { ref, watch, onMounted, nextTick } from 'vue'
  2. export const useOverflow = (elementRef, dataRef) => {
  3. // 根据 elementRef 类型来初始化 isOverflow
  4. const isOverflow = Array.isArray(elementRef.value) ? ref([]) : ref(false)
  5. const checkOverflow = (element) => {
  6. if (element) {
  7. return element.scrollWidth > element.clientWidth
  8. }
  9. return false
  10. }
  11. // 用于处理单个或多个元素的溢出检查
  12. const updateOverflowStatus = () => {
  13. if (Array.isArray(elementRef.value)) {
  14. // 如果是数组,检查每个元素
  15. isOverflow.value = elementRef.value.map((el) => checkOverflow(el))
  16. } else {
  17. // 如果是单个元素,直接返回布尔值
  18. isOverflow.value = checkOverflow(elementRef.value)
  19. }
  20. }
  21. // 初次 mounted 时检查是否溢出
  22. onMounted(() => {
  23. nextTick(() => {
  24. updateOverflowStatus()
  25. })
  26. })
  27. // 监听数据变化,更新溢出状态
  28. watch(
  29. () => dataRef,
  30. () => {
  31. nextTick(() => {
  32. updateOverflowStatus()
  33. })
  34. },
  35. {
  36. deep: true,
  37. immediate: true
  38. }
  39. )
  40. return {
  41. isOverflow
  42. }
  43. }