UNPKG

tdesign-vue-next

Version:
1 lines 20.8 kB
{"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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"}