{"version":3,"file":"CenterScroll.vue2.mjs","sources":["../../../../../../packages/components/center-scroll/src/CenterScroll.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as DO_defineComponent } from 'vue';\nexport default /*#__PURE__*/ DO_defineComponent({\n\tname: 'ToCenterScroll'\n});\n</script>\n<template>\n\t<div class=\"to-centerScroll\" :class=\"setClass\" :style=\"{ height: `${height}em` }\">\n\t\t<div class=\"to-centerScroll-top\" :style=\"{ height: `${(height - itemHeight) / 2}em` }\"></div>\n\t\t<div ref=\"scrollContainer\" class=\"to-centerScroll-content\" @scroll=\"onScroll\">\n\t\t\t<div class=\"to-centerScroll-wrapper\" :style=\"{ paddingTop: `${(height - itemHeight) / 2}em`, paddingBottom: `${(height - itemHeight) / 2}em` }\">\n\t\t\t\t<div v-for=\"(item, index) in iData\" :key=\"index\" :ref=\"el => setItemRef(el, index)\" class=\"to-centerScroll-item\" :class=\"{ 'is-on': item.value === modelValue, 'is-dis': item.disabled }\">\n\t\t\t\t\t<span class=\"to-centerScroll-item-text\">{{ item.label }}</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"to-centerScroll-bottom\" :style=\"{ height: `${(height - itemHeight) / 2}em` }\"></div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted, nextTick } from 'vue'\nimport { centerScrollProps, centerScrollEmits, type CenterScrollDataItem } from './center-scroll'\nimport { getEm } from '@touchvue/utils'\n\n\n\nconst props = defineProps(centerScrollProps)\nconst emit = defineEmits(centerScrollEmits)\n\n// 响应式数据\nconst scrollContainer = ref<HTMLElement | null>(null)\nconst itemRefs = ref<(HTMLElement | null)[]>([])\nconst inited = ref(false)\nconst iData = ref<CenterScrollDataItem[]>([])\nconst isScrolling = ref(false)\nconst scrollTimeout = ref<number | null>(null)\nconst isScrollTo = ref(false)\nconst changeBySelf = ref(false)\nconst itemHeight = ref(0)\n\n// 计算属性\nconst height = computed(() => Number(props.height))\n\nonMounted(() => {\n\titemHeight.value = Number(((itemRefs.value[0].getBoundingClientRect().height || 0) / getEm()).toFixed(2))\n})\n\n// 设置item引用\nconst setItemRef = (el: any, index: number) => {\n\tif (el) {\n\t\titemRefs.value[index] = el as HTMLElement\n\t}\n}\n\n// 处理数据变化\nconst handleDataChange = (data: string | unknown[]) => {\n\tiData.value = []\n\tif (typeof data === 'string') {\n\t\tdata.split(',').forEach(item => {\n\t\t\tiData.value.push({\n\t\t\t\tlabel: item,\n\t\t\t\tvalue: item,\n\t\t\t\tdisabled: false\n\t\t\t})\n\t\t})\n\t} else {\n\t\tiData.value = JSON.parse(JSON.stringify(data))\n\t}\n}\n\n// 设置类名\nconst setClass = computed(() => {\n\tlet arr = []\n\tif (props.mode) arr.push(`mode-${props.mode}`)\n\treturn arr\n})\n\n// 滚动事件处理\nconst onScroll = () => {\n\tif (!inited.value) return\n\n\tif (scrollTimeout.value) {\n\t\tclearTimeout(scrollTimeout.value)\n\t}\n\n\tisScrolling.value = true\n\tscrollTimeout.value = window.setTimeout(() => {\n\t\tisScrolling.value = false\n\t\tif (!isScrollTo.value) {\n\t\t\tcenterClosestItem()\n\t\t}\n\t}, 200)\n}\n\n// 居中最近的项目\nconst centerClosestItem = () => {\n\tif (!scrollContainer.value) return\n\n\tconst container = scrollContainer.value\n\tconst containerRect = container.getBoundingClientRect()\n\tconst containerCenter = containerRect.top + containerRect.height / 2\n\n\tlet closestItem: CenterScrollDataItem | null = null\n\tlet closestItemEl: HTMLElement | null = null\n\tlet closestDistance = Infinity\n\n\tiData.value.forEach((item, index) => {\n\t\tif (!item.disabled) {\n\t\t\tconst itemEl = itemRefs.value[index]\n\t\t\tif (itemEl) {\n\t\t\t\tconst itemRect = itemEl.getBoundingClientRect()\n\t\t\t\tconst itemCenter = itemRect.top + itemRect.height / 2\n\t\t\t\tconst distance = Math.abs(containerCenter - itemCenter)\n\n\t\t\t\tif (distance < closestDistance) {\n\t\t\t\t\tclosestDistance = distance\n\t\t\t\t\tclosestItem = item\n\t\t\t\t\tclosestItemEl = itemEl\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\tif (closestItemEl && closestItem) {\n\t\tscrollTo(closestItemEl)\n\t\tchangeBySelf.value = true\n\t\temit('update:modelValue', closestItem.value)\n\t\temit('change', closestItem.value)\n\t\tnextTick(() => {\n\t\t\tchangeBySelf.value = false\n\t\t})\n\t}\n}\n\n// 滚动到指定元素\nconst scrollTo = (el: HTMLElement, behavior: ScrollBehavior = 'smooth') => {\n\tif (!scrollContainer.value) return\n\n\tisScrollTo.value = true\n\tconst itemRect = el.getBoundingClientRect()\n\tconst container = scrollContainer.value\n\tconst containerRect = container.getBoundingClientRect()\n\tconst containerCenter = containerRect.top + containerRect.height / 2\n\tconst offset = itemRect.top + itemRect.height / 2 - containerCenter\n\n\tcontainer.scrollTo({\n\t\ttop: container.scrollTop + offset,\n\t\tbehavior\n\t})\n\n\tsetTimeout(() => {\n\t\tisScrollTo.value = false\n\t}, 500)\n}\n\n// 监听modelValue变化\nwatch(\n\t() => props.modelValue,\n\tval => {\n\t\tif (changeBySelf.value) return\n\n\t\tconst index = iData.value.findIndex(item => item.value === val)\n\t\tif (index > -1 && itemRefs.value[index]) {\n\t\t\tscrollTo(itemRefs.value[index]!, 'instant')\n\t\t}\n\t}\n)\n\n// 监听data变化\nwatch(\n\t() => props.data,\n\tdata => {\n\t\thandleDataChange(data as string | CenterScrollDataItem[])\n\t},\n\t{ immediate: true }\n)\n\n// 组件挂载后初始化\nonMounted(() => {\n\tsetTimeout(() => {\n\t\tif (props.modelValue) {\n\t\t\tconst index = iData.value.findIndex(item => item.value === props.modelValue)\n\t\t\tif (index !== -1 && itemRefs.value[index]) {\n\t\t\t\tscrollTo(itemRefs.value[index]!, 'instant')\n\t\t\t}\n\t\t} else if (iData.value.length > 0) {\n\t\t\temit('update:modelValue', iData.value[0].value)\n\t\t\temit('change', iData.value[0].value)\n\t\t}\n\n\t\tsetTimeout(() => {\n\t\t\tinited.value = true\n\t\t}, 100)\n\t}, 100)\n})\n\n// 暴露方法\ndefineExpose({\n\tscrollTo,\n\tcenterClosestItem\n})\n</script>\n"],"names":["DO_defineComponent","_createElementBlock","_normalizeClass","_createElementVNode","_normalizeStyle","_openBlock","_Fragment","_renderList","modelValue","_toDisplayString"],"mappings":"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"}