{"version":3,"file":"useVirtualScroll.mjs","sources":["../../../components/hooks/useVirtualScroll.ts"],"sourcesContent":["/* eslint-disable */\n/**\n * 当前虚拟滚动存在的问题\n * 1. 反复拖动滚动条，底部会出现奇怪的高度\n * 2. 表格高度发生变化时，底部也会出现奇怪的高度\n * 3. 无法直接定位滚动到某个元素，进而无法实现 Select 组件直接滚动到选中项\n */\nimport { ref, toRefs, reactive, onMounted, computed, watch, nextTick } from 'vue';\n\n// 虚拟滚动Hooks的完整实现，只所以封装成hooks，主要是为了方便跟其他组件搭配使用，比如说表格或者下拉框\nconst useVirtualScroll = ({\n  data,\n  container,\n  fixedHeight = false,\n  lineHeight = 30,\n  bufferSize = 20,\n  threshold = 100,\n}: {\n  data: any;\n  container: any;\n  fixedHeight: boolean;\n  lineHeight: number;\n  bufferSize: number;\n  threshold: number;\n}) => {\n  const state = reactive({\n    visibleData: [],\n    cachedHeight: [],\n    cachedScrollY: [],\n  });\n  const isVirtual = computed(() => data.value.length > threshold);\n  const updateId = ref(0);\n  const trs = new Map(); // 当前展示的行元素和数据\n\n  let visibleCount = 0; // 可见的节点数量\n  let beforeScrollTop = 0; // 上一次的滚动条位置\n  let index = 0; // 偏移行数\n  let offset = 0; // 少于一行行高的偏移量\n  let start = 0; // 第一条显示的行\n  let last = 0; // 最后一条显示的行\n  // let revising = false; // 是否正在修正滚动条\n\n  const reset = () => {\n    data.value.forEach((item: any, i: number) => {\n      item.$index = i;\n      if (fixedHeight) {\n        state.cachedScrollY[i] = i * lineHeight;\n      }\n    });\n    if (!fixedHeight) {\n      state.cachedScrollY[data.value.length - 1] = undefined; // 初始化cachedScrollY数组的长度\n    }\n  };\n  reset();\n\n  // 计算虚拟滚动列表总高度，需要动态修正\n  const scrollHeight = computed(() => {\n    const { cachedHeight } = state;\n    const { length } = cachedHeight;\n    if (length) {\n      const maxScrollY = cachedHeight.reduce((sum, v) => sum + v || lineHeight, 0); // 当前总高度\n      if (cachedHeight.length === data.value.length) {\n        return maxScrollY;\n      }\n      const average = maxScrollY / cachedHeight.length; // 平均高度\n      return maxScrollY + (data.value.length - cachedHeight.length) * average; // 预估总高度\n    }\n    return isVirtual.value ? data.value.length * lineHeight : 0;\n  });\n  const translateY = computed(() => {\n    const { visibleData } = state;\n    const firstRow = visibleData[0];\n    if (firstRow) {\n      // 修复只有一个元素时存在偏移的问题\n      return visibleData.length === 1 ? 0 : state.cachedScrollY[firstRow.$index];\n    }\n    return 0;\n  });\n\n  // 更新可视区域的节点数据\n  const updateVisibleData = () => {\n    last = Math.min(start + visibleCount + bufferSize * 2, data.value.length);\n    state.visibleData = data.value.slice(start, last);\n  };\n  // 计算每行对应的scrollTop值\n  const calculateScrollY = () => {\n    const anchorDom = trs.get(index); // 获取锚点元素\n    if (!anchorDom) {\n      return; // 快速调整高度时，新的元素可能来不及加载，暂时跳过更新\n    }\n    const anchorDomHeight = anchorDom?.getBoundingClientRect()?.height; // 获取锚点元素的高\n    state.cachedScrollY[index] = container.value.scrollTop - offset; // 锚点元素scrollY= 容器滚动高度 - 锚点元素的offset\n    state.cachedHeight[index] = anchorDomHeight;\n\n    for (let i = index + 1; i <= state.visibleData[state.visibleData.length - 1]?.$index; i++) {\n      // 计算锚点后面的元素scrollY\n      const tr = trs.get(i);\n      const { height } = tr?.getBoundingClientRect() || {};\n      state.cachedHeight[i] = height;\n      const scrollY = state.cachedScrollY[i - 1] + state.cachedHeight[i - 1]; // 当前元素的y 是前一个元素的y+前一个元素高度\n      // state.cachedScrollY[i] = scrollY;\n      state.cachedScrollY.splice(i, 1, scrollY); // 兼容vue2的composition api\n    }\n\n    for (let i = index - 1; i >= state.visibleData[0]?.$index; i--) {\n      const tr = trs.get(i);\n      const { height } = tr?.getBoundingClientRect() || {};\n      state.cachedHeight[i] = height;\n      const scrollY = state.cachedScrollY[i + 1] - state.cachedHeight[i]; // 当前元素的y是下一个元素y - 当前元素高度\n      // state.cachedScrollY[i] = scrollY;\n      state.cachedScrollY.splice(i, 1, scrollY);\n    }\n    if (state.cachedScrollY[0] > 0) {\n      // 修正滚动过快时，滚动到顶部时，滚动条多余的问题\n      // revising = true;\n      const distance = state.cachedScrollY[0]; // 第一个元素scrollY即为多出的量\n      const length = Math.min(last, data.value.length);\n      for (let i = 0; i < length; i++) {\n        // state.cachedScrollY[i] -= distance;\n        state.cachedScrollY.splice(i, 1, state.cachedScrollY[i] - distance);\n      }\n\n      const scrollTop = state.cachedScrollY[index - 1] ? state.cachedScrollY[index - 1] + offset : offset;\n      container.value.scrollTop = scrollTop;\n      beforeScrollTop = scrollTop;\n      // revising = false;\n    }\n    // 修正拖动过快时，滚动到顶端时，滚动条不足的偏差\n    if (state.cachedScrollY[start] < 0) {\n      // revising = true;\n      const s = state.cachedHeight.slice(0, Math.max(0, index)).reduce((sum, v) => sum + v, 0) + offset;\n      container.value.scrollTop = s;\n      beforeScrollTop = s;\n      if (s === 0) {\n        index = 0;\n        offset = 0;\n      }\n      // revising = false;\n    }\n    nextTick(() => {\n      // setTimeout是为了保证快速拖动到底部时，以下逻辑能够正常执行\n      const { scrollTop, scrollHeight, clientHeight } = container.value;\n      if (scrollTop + clientHeight === scrollHeight) {\n        // 滚动到底部时，修正底部有空余的问题\n        // revising = true;\n        for (let i = last - 1; i >= start; i--) {\n          if (i === last - 1) {\n            // state.cachedScrollY[i] = scrollHeight.value - state.cachedHeight[i];\n            state.cachedScrollY.splice(i, 1, scrollHeight.value - state.cachedHeight[i]);\n          } else {\n            // state.cachedScrollY[i] = state.cachedScrollY[i + 1] - state.cachedHeight[i];\n            state.cachedScrollY.splice(i, 1, state.cachedScrollY[i + 1] - state.cachedHeight[i]);\n          }\n        }\n        // revising = false;\n      }\n    });\n  };\n\n  // 滚动时动态计算和渲染\n  const handleScroll = () => {\n    if (!isVirtual.value) return;\n    // if (revising) {\n    //   return false; // 修正滚动条时，暂停滚动逻辑\n    // }\n    const { scrollTop } = container.value;\n    let distance = scrollTop - beforeScrollTop; // 滚动差值\n    beforeScrollTop = scrollTop;\n    distance += offset;\n    let lastIndex = index;\n    // !disatance 可能为横向滚动，不做任何计算\n    if (!distance) return;\n    if (distance >= 0) {\n      // 向下滚动\n      while (lastIndex < data.value.length && distance > (state.cachedHeight[lastIndex] || lineHeight)) {\n        if (!state.cachedHeight[lastIndex]) {\n          state.cachedHeight[lastIndex] = lineHeight;\n        }\n        distance -= state.cachedHeight[lastIndex];\n        lastIndex++;\n      }\n      if (lastIndex >= data.value.length) {\n        index = data.value.length - 1;\n        offset = 0;\n      } else {\n        index = lastIndex;\n        offset = distance;\n      }\n      const { clientHeight, scrollHeight } = container.value;\n      if (scrollTop + clientHeight === scrollHeight) {\n        // 滚动条到底了\n        index = data.value.length - visibleCount + 1;\n        // calculateScrollY();\n      }\n      if (start <= index - bufferSize) {\n        // 计算第一个挂载元素\n        start = Math.min(data.value.length - visibleCount, index - bufferSize);\n        if (start < 0) {\n          start = 0;\n        }\n      }\n    } else {\n      // 向上滚动\n      while (distance < 0) {\n        lastIndex--;\n        if (!state.cachedHeight[lastIndex]) {\n          state.cachedHeight[lastIndex] = lineHeight;\n        }\n        distance += state.cachedHeight[lastIndex];\n      }\n      if (lastIndex < 0) {\n        index = 0;\n        offset = 0;\n      } else {\n        index = lastIndex;\n        offset = distance;\n      }\n      calculateScrollY();\n      if (start > index - bufferSize) {\n        // 计算第一个挂载元素\n        start = Math.max(0, index - bufferSize);\n      }\n    }\n    updateVisibleData();\n  };\n\n  !fixedHeight && watch(updateId, calculateScrollY, { flush: 'post' });\n  const handleRowMounted = () => {\n    if (!isVirtual.value) return;\n    updateId.value++;\n  };\n  watch(data, () => {\n    reset();\n    state.visibleData = [];\n    state.cachedScrollY = [];\n    state.cachedHeight = [];\n    beforeScrollTop = 0;\n    index = 0;\n    offset = 0;\n    start = 0;\n    // revising = false;\n    trs.clear();\n    if (data.value.length <= threshold) {\n      state.visibleData = data.value;\n    } else {\n      updateVisibleData();\n    }\n\n    container.value && (container.value.scrollTop = 0);\n  });\n  let mounted = false;\n  const refreshContainer = () => {\n    if (mounted) {\n      visibleCount = Math.ceil(container.value.offsetHeight / lineHeight);\n      updateVisibleData();\n    }\n  };\n  onMounted(() => {\n    if (!window || !window.IntersectionObserver) {\n      return;\n    }\n    const ob = new window.IntersectionObserver((entries) => {\n      const entry = entries[0];\n      if (entry.isIntersecting || entry.intersectionRatio) {\n        mounted = true;\n        isVirtual.value && refreshContainer();\n        ob.unobserve(container.value);\n      }\n    });\n    container.value && ob.observe(container.value);\n  });\n  return {\n    trs,\n    scrollHeight,\n    ...toRefs(state),\n    translateY,\n    handleScroll,\n    handleRowMounted,\n    refreshContainer,\n    fixedHeight,\n    calculateScrollY,\n  };\n};\nexport default useVirtualScroll;\n"],"names":["useVirtualScroll","data","_ref","container","_ref$fixedHeight","fixedHeight","_ref$lineHeight","lineHeight","_ref$bufferSize","bufferSize","_ref$threshold","threshold","state","reactive","visibleData","cachedHeight","cachedScrollY","isVirtual","computed","value","length","updateId","ref","trs","Map","visibleCount","beforeScrollTop","index","offset","start","last","reset","forEach","item","i","$index","scrollHeight","maxScrollY","reduce","sum","v","average","translateY","firstRow","updateVisibleData","Math","min","slice","calculateScrollY","_anchorDom$getBoundin","anchorDom","get","anchorDomHeight","getBoundingClientRect","height","scrollTop","_state$visibleData","tr","_ref2","scrollY","splice","_state$visibleData$","_ref3","distance","s","max","nextTick","_container$value","clientHeight","handleScroll","lastIndex","_container$value2","watch","flush","handleRowMounted","clear","mounted","refreshContainer","ceil","offsetHeight","onMounted","window","IntersectionObserver","ob","entries","entry","isIntersecting","intersectionRatio","unobserve","observe","_objectSpread","toRefs"],"mappings":"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"}