UNPKG

tdesign-vue-next

Version:
1 lines 8 kB
{"version":3,"file":"usePanelVirtualScroll.mjs","sources":["../../../../components/select/hooks/usePanelVirtualScroll.ts"],"sourcesContent":["import { Ref, computed, onMounted, onBeforeUnmount } from 'vue';\nimport { useVirtualScroll } from '@tdesign/shared-hooks';\nimport { TdSelectProps } from '../type';\nimport { Styles } from '../../common';\n\nexport const usePanelVirtualScroll = (props: {\n scroll: TdSelectProps['scroll'];\n popupContentRef: Ref<HTMLElement>;\n options: Ref<TdSelectProps['options']>;\n}) => {\n const isVirtual = computed(\n () => props.scroll?.type === 'virtual' && props.options.value?.length > (props.scroll?.threshold || 100),\n );\n\n const {\n trs = null,\n visibleData = null,\n handleScroll: handleVirtualScroll = null,\n scrollHeight = null,\n translateY = null,\n handleRowMounted = null,\n } = props.scroll?.type === 'virtual'\n ? useVirtualScroll({\n container: props.popupContentRef,\n data: props.options,\n fixedHeight: props.scroll?.isFixedRowHeight || false,\n lineHeight: props.scroll?.rowHeight || 28, // 默认每行高度28\n bufferSize: props.scroll?.bufferSize || 20,\n threshold: props.scroll?.threshold || 100,\n })\n : {};\n let lastScrollY = -1;\n\n const onInnerVirtualScroll = (e: WheelEvent) => {\n if (!isVirtual.value) {\n return;\n }\n const target = e.target as HTMLElement;\n const top = target.scrollTop;\n // 排除横向滚动触发的纵向虚拟滚动计算\n if (Math.abs(lastScrollY - top) > 5) {\n handleVirtualScroll();\n lastScrollY = top;\n } else {\n lastScrollY = -1;\n }\n };\n\n // 监听popup滚动 处理虚拟滚动时的virtualData变化\n onMounted(() => {\n props.popupContentRef.value?.addEventListener('scroll', onInnerVirtualScroll);\n });\n\n // 卸载时取消监听\n onBeforeUnmount(() => {\n props.popupContentRef.value?.removeEventListener('scroll', onInnerVirtualScroll);\n });\n\n const cursorStyle = computed(\n () =>\n ({\n position: 'absolute',\n width: '1px',\n height: '1px',\n transition: 'transform 0.2s',\n transform: `translate(0, ${scrollHeight.value}px)`,\n '-ms-transform': `translate(0, ${scrollHeight.value}px)`,\n '-moz-transform': `translate(0, ${scrollHeight.value}px)`,\n '-webkit-transform': `translate(0, ${scrollHeight.value}px)`,\n } as Styles),\n );\n\n const panelStyle = computed(\n () =>\n ({\n transform: `translate(0, ${translateY.value}px)`,\n '-ms-transform': `translate(0, ${translateY.value}px)`,\n '-moz-transform': `translate(0, ${translateY.value}px)`,\n '-webkit-transform': `translate(0, ${translateY.value}px)`,\n } as Styles),\n );\n\n return {\n trs,\n scrollHeight,\n translateY,\n visibleData,\n handleRowMounted,\n isVirtual,\n cursorStyle,\n panelStyle,\n };\n};\n"],"names":["usePanelVirtualScroll","props","_props$scroll3","_props$scroll4","_props$scroll5","_props$scroll6","_props$scroll7","isVirtual","computed","_props$scroll","_props$options$value","_props$scroll2","scroll","type","options","value","length","threshold","_ref","useVirtualScroll","container","popupContentRef","data","fixedHeight","isFixedRowHeight","lineHeight","rowHeight","bufferSize","_ref$trs","trs","_ref$visibleData","visibleData","_ref$handleScroll","handleScroll","handleVirtualScroll","_ref$scrollHeight","scrollHeight","_ref$translateY","translateY","_ref$handleRowMounted","handleRowMounted","lastScrollY","onInnerVirtualScroll","e","target","top","scrollTop","Math","abs","onMounted","_props$popupContentRe","addEventListener","onBeforeUnmount","_props$popupContentRe2","removeEventListener","cursorStyle","position","width","height","transition","transform","concat","panelStyle"],"mappings":"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"}