{"version":3,"file":"useVirtualScrollNew.mjs","sources":["../../../components/hooks/useVirtualScrollNew.ts"],"sourcesContent":["/**\n * 基于原作者（@louiszhai）的思路二次开发，为保证其他组件暂不受影响，单独开一个文件\n * 新增支持以下 3 个特性\n * 1. 支持不同表格高度\n * 2. 支持滚动到特定元素，方便 Select 等组件展开时直接定位到选中元素\n * 3. 支持数据变化不重置，方便支持树形结构虚拟滚动\n */\nimport { ref, computed, watch, Ref } from 'vue';\nimport { TScroll } from '../common';\nimport useResizeObserver from './useResizeObserver';\nimport { max } from 'lodash-es';\nimport { min } from 'lodash-es';\nimport { sum } from 'lodash-es';\nimport { throttle } from 'lodash-es';\n\nexport type UseVirtualScrollParams = Ref<{\n  /** 列数据 */\n  data: { [key: string]: any }[];\n  scroll: TScroll & {\n    /** 固定行（冻结行），示例：[M, N]，表示冻结头 M 行和尾 N 行。M 和 N 值为 0 时，表示不冻结行 */\n    fixedRows?: Array<number>;\n  };\n  preventResizeRefresh?: boolean;\n}>;\n\nexport interface ScrollToElementParams {\n  /** 跳转元素下标 */\n  index: number;\n  /** 跳转元素距离顶部的距离 */\n  top?: number;\n  /** 单个元素高度非固定场景下，即 isFixedRowHeight = false。延迟设置元素位置，一般用于依赖不同高度异步渲染等场景，单位：毫秒 */\n  time?: number;\n  behavior?: 'auto' | 'smooth';\n}\n\nconst useVirtualScroll = (container: Ref<HTMLElement | null>, params: UseVirtualScrollParams) => {\n  /** 注意测试：数据长度为空；数据长度小于表格高度等情况。即期望只有数据量达到一定程度才允许开启虚拟滚动 */\n  const visibleData = ref<any[]>([]);\n  // 用于显示表格列\n  const translateY = ref((params.value.data?.length || 0) * (params.value.scroll?.rowHeight || 50));\n  // 滚动高度，用于显示滚动条\n  const scrollHeight = ref(0);\n  // 已经通过节点渲染计算出来的各自行高\n  // 不要使用响应式，数据量大时会产生卡顿\n  let trHeightList: number[] = [];\n  const containerHeight = ref(0);\n  const containerWidth = ref(0);\n  const startAndEndIndex = ref<[number, number]>([0, 15]);\n\n  // 设置初始值\n  const tScroll = computed(() => {\n    const { scroll } = params.value;\n    if (!scroll) return {};\n    return {\n      bufferSize: scroll.bufferSize || 10,\n      isFixedRowHeight: scroll.isFixedRowHeight ?? false,\n      rowHeight: scroll.rowHeight || 47,\n      threshold: scroll.threshold || 100,\n      type: scroll.type,\n      fixedRows: scroll.fixedRows ?? [0, 0],\n    };\n  });\n\n  // 当前场景是否满足开启虚拟滚动的条件\n  const isVirtualScroll = computed(() => {\n    const { data } = params.value;\n    return tScroll.value.type === 'virtual' && tScroll.value.threshold < data.length;\n  });\n\n  // 一次循环遍历中计算可视范围的相关信息，减少大数据量时的遍历开销\n  function getVisibleRangeConfig() {\n    const scrollTop = container.value?.scrollTop ?? 0;\n    const fixedStart = tScroll.value.fixedRows[0];\n\n    // 记录前置 buffer 的高度\n    const prevBufferHeightList: number[] = [];\n    // 没有被渲染的行的高度，用于设定容器的 translateY\n    let hiddenHeight = 0;\n\n    let visibleStart = -1;\n    let visibleEnd = -1;\n\n    let totalHeight = 0;\n\n    for (let i = 0, len = params.value.data.length; i < len; i++) {\n      const rowHeight = trHeightList[i] ?? tScroll.value.rowHeight;\n      totalHeight = totalHeight + rowHeight;\n      // 获取第一个可视范围内的元素\n      if (totalHeight > scrollTop && visibleStart === -1) {\n        visibleStart = i;\n        if (visibleStart - tScroll.value.bufferSize > 0) {\n          hiddenHeight = totalHeight - rowHeight - sum(prevBufferHeightList);\n        }\n      }\n      if (visibleStart === -1) {\n        prevBufferHeightList.push(rowHeight);\n        if (prevBufferHeightList.length > tScroll.value.bufferSize) {\n          prevBufferHeightList.shift();\n        }\n      }\n      // 获取最后一个可视范围内的元素\n      if (\n        visibleEnd === -1 &&\n        (totalHeight > containerHeight.value + scrollTop || i === params.value.data.length - 1)\n      ) {\n        visibleEnd = i;\n      }\n\n      if (visibleStart !== -1 && visibleEnd !== -1) {\n        // 不再统计高度\n        break;\n      }\n    }\n\n    // 前后偏移 buffer\n    const startIndex = max([visibleStart - tScroll.value.bufferSize, 0]);\n    const endIndex = min([visibleEnd + tScroll.value.bufferSize, params.value.data.length]);\n\n    // 以 sticky 定位渲染的固定行，会占据高度，影响整体高度\n    const stickyHeight = sum(trHeightList.slice(0, Math.min(startIndex, fixedStart)));\n\n    return {\n      startIndex,\n      endIndex,\n      translateY: hiddenHeight - stickyHeight,\n    };\n  }\n\n  const updateVisibleData = throttle(() => {\n    // 计算前后的buffer偏移后的渲染数据\n    const { startIndex, endIndex, translateY: translateYValue } = getVisibleRangeConfig();\n\n    // 需要考虑固定行的情况\n    const fixedRows = tScroll.value.fixedRows;\n    const [fixedStart, fixedEnd] = fixedRows;\n    let fixedStartData = fixedStart ? params.value.data.slice(0, fixedStart) : [];\n    if (fixedStart && startIndex < fixedStart) {\n      fixedStartData = fixedStartData.slice(0, startIndex);\n    }\n    let fixedEndData = fixedEnd ? params.value.data.slice(params.value.data.length - fixedEnd) : [];\n    const bottomStartIndex = endIndex - params.value.data.length + 1 + (fixedEnd ?? 0);\n    if (fixedEnd && bottomStartIndex > 0) {\n      fixedEndData = fixedEndData.slice(bottomStartIndex);\n    }\n\n    if (startAndEndIndex.value.join() !== [startIndex, endIndex].join() && startIndex >= 0) {\n      translateY.value = translateYValue;\n      visibleData.value = fixedStartData.concat(params.value.data.slice(startIndex, endIndex), fixedEndData);\n      startAndEndIndex.value = [startIndex, endIndex];\n    }\n  }, 100);\n\n  // 固定高度场景，不需要通过行渲染获取高度（仅非固定高度场景需要）\n  const handleRowMounted = (rowData: any) => {\n    if (!isVirtualScroll.value || !rowData || tScroll.value.isFixedRowHeight || !container.value) return;\n    const trHeight = rowData.ref.value?.getBoundingClientRect().height || tScroll.value.rowHeight;\n    const rowIndex = rowData.data.VIRTUAL_SCROLL_INDEX;\n\n    if (trHeightList[rowIndex] !== trHeight) {\n      const diff = trHeight - trHeightList[rowIndex];\n      trHeightList[rowIndex] = trHeight;\n      // 采用 diff 的方式更新，不再遍历数组\n      scrollHeight.value = scrollHeight.value + diff;\n    }\n  };\n\n  const handleScroll = () => {\n    if (!isVirtualScroll.value) return;\n    updateVisibleData();\n  };\n\n  const refreshVirtualScroll = ([{ contentRect }]: [ResizeObserverEntry]) => {\n    // 如果宽度发生变化，重置滚动位置\n    if (params.value.preventResizeRefresh) return;\n    const maxScrollbarWidth = 16;\n    if (Math.abs(contentRect.width - containerWidth.value) > maxScrollbarWidth && !!container.value) {\n      container.value.scrollTop = 0;\n      translateY.value = 0;\n    }\n    containerWidth.value = contentRect.width;\n    // 高度更新后，由 height 独立的 watch 触发可视区域的更新\n    containerHeight.value = contentRect.height;\n  };\n\n  const addIndexToData = (data: any[]) => {\n    data.forEach((item, index) => {\n      // eslint-disable-next-line\n      item['VIRTUAL_SCROLL_INDEX'] = index;\n    });\n  };\n\n  const updateScrollTop = ({ index, top = 0, behavior }: ScrollToElementParams) => {\n    const scrollTop = sum(trHeightList.slice(0, index + 1)) - top;\n\n    container.value.scrollTo({\n      top: scrollTop,\n      behavior: behavior || 'auto',\n    });\n  };\n\n  /**\n   * 滚动到指定元素（对外暴露的方法，谨慎修改）\n   */\n  const scrollToElement = (p: ScrollToElementParams) => {\n    updateScrollTop(p);\n    // 不同行高的表格需要异步计算\n    if (!tScroll.value.isFixedRowHeight) {\n      const duration = p.time ?? 60;\n      const timer = setTimeout(() => {\n        updateScrollTop(p);\n        clearTimeout(timer);\n      }, duration);\n    }\n  };\n\n  // 如果初始化时 isVirtualScroll 为 false，undefined 的 ref 会导致无法监听元素高度变化\n  useResizeObserver(\n    computed(() => (isVirtualScroll.value ? container.value : undefined)),\n    refreshVirtualScroll,\n  );\n\n  // 固定高度场景，可直接通过数据长度计算出最大滚动高度\n  watch(\n    () => [[...params.value.data], tScroll.value, isVirtualScroll.value, container.value],\n    () => {\n      if (!isVirtualScroll.value || !container.value) return;\n      const { data } = params.value;\n      addIndexToData(data);\n\n      // 有可能初始化时，resize 监听没触发，尝试设置初始化容器高度\n      containerHeight.value = container.value.getBoundingClientRect().height;\n\n      if (trHeightList.length !== params.value.data.length) {\n        // 暂时对于 table 和 tree 场景，信任之前缓存的行高\n        // 后续优化可能提供一个参数，进行监听从而清除记录的行高会更好\n        const initHeightList: number[] = Array.from(trHeightList);\n        // 数据长度如果发生变化，裁剪高度记录的数组，避免算出异常的总高度\n        initHeightList.length = params.value.data.length;\n        initHeightList.fill(tScroll.value.rowHeight || 47);\n        trHeightList = initHeightList;\n      }\n\n      scrollHeight.value = sum(trHeightList);\n\n      // 清除记录的滚动顺序\n      startAndEndIndex.value = [0, 0];\n      updateVisibleData();\n    },\n    { immediate: true },\n  );\n\n  // 当容器高度变化后，重新计算可视区域数据\n  watch(\n    () => containerHeight.value,\n    () => {\n      updateVisibleData();\n    },\n  );\n\n  return {\n    visibleData,\n    translateY,\n    scrollHeight,\n    isVirtualScroll,\n    handleScroll,\n    handleRowMounted,\n    scrollToElement,\n  };\n};\n\nexport type VirtualScrollConfig = ReturnType<typeof useVirtualScroll>;\n\nexport default useVirtualScroll;\n"],"names":["useVirtualScroll","container","params","_params$value$data","_params$value$scroll","visibleData","ref","translateY","value","data","length","scroll","rowHeight","scrollHeight","trHeightList","containerHeight","containerWidth","startAndEndIndex","tScroll","computed","_scroll$isFixedRowHei","_scroll$fixedRows","bufferSize","isFixedRowHeight","threshold","type","fixedRows","isVirtualScroll","getVisibleRangeConfig","_container$value$scro","_container$value","scrollTop","fixedStart","prevBufferHeightList","hiddenHeight","visibleStart","visibleEnd","totalHeight","i","len","_trHeightList$i","sum","push","shift","startIndex","max","endIndex","min","stickyHeight","slice","Math","updateVisibleData","throttle","_getVisibleRangeConfi","translateYValue","_fixedRows","_slicedToArray","fixedEnd","fixedStartData","fixedEndData","bottomStartIndex","join","concat","handleRowMounted","rowData","_rowData$ref$value","trHeight","getBoundingClientRect","height","rowIndex","VIRTUAL_SCROLL_INDEX","diff","handleScroll","refreshVirtualScroll","_ref2","_ref","contentRect","preventResizeRefresh","maxScrollbarWidth","abs","width","addIndexToData","forEach","item","index","updateScrollTop","top","_ref3$top","behavior","scrollTo","scrollToElement","p","_p$time","duration","time","timer","setTimeout","clearTimeout","useResizeObserver","watch","_toConsumableArray","initHeightList","Array","from","fill","immediate"],"mappings":"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"}