UNPKG

tdesign-mobile-vue

Version:
1 lines 37.4 kB
{"version":3,"file":"picker.class.mjs","sources":["../../src/picker/picker.class.ts"],"sourcesContent":["import { preventDefault } from '../shared/dom';\nimport { usePrefixClass } from '../hooks/useClass';\nimport { PickerColumn, PickerWheelConfig } from './type';\nimport { KeysType } from '../common';\nimport { findIndexOfEnabledOption, limitNumberInRange } from './utils';\n\nconst classPrefix = usePrefixClass();\n\nexport interface PickerOptions {\n defaultIndex?: number;\n keys?: KeysType;\n defaultPickerColumns?: PickerColumn;\n el: HTMLElement | HTMLDivElement | HTMLUListElement;\n onChange: (index: number) => void;\n wheelConfig: Required<PickerWheelConfig>;\n}\n\nconst quartEaseOut = function (t: number, b: number, c: number, d: number) {\n let tempT = t;\n return -c * ((tempT = tempT / d - 1) * tempT * tempT * tempT - 1) + b;\n};\n\n/**\n * constant var\n */\nexport const DEFAULT_ITEM_HEIGHT = 40;\nconst DEFAULT_HOLDER_HEIGHT = 200;\n\n/**\n * @name picker\n * @description 阻尼参数来源iscroll5,灵感来自mui.picker\n * @param {[HTMLDivElement]} el [picker-item的DOM元素]\n * @param {[Function]} onChange [发生change事件时候的回调]\n * @param {[Number]} defaultIndex [picker-item开始的索引值]\n */\nclass Picker {\n holder: HTMLElement | HTMLUListElement;\n\n options: PickerOptions;\n\n list: HTMLUListElement | null = null;\n\n elementItems: HTMLLIElement[] = [];\n\n curIndex = 0;\n\n itemClassName = '';\n\n itemSelectedClassName = '';\n\n itemHeight: number = DEFAULT_ITEM_HEIGHT;\n\n lastMoveTime = 0;\n\n lastMoveStart = 0;\n\n stopInertiaMove = false;\n\n startY = 0;\n\n isPicking = false;\n\n offsetYOfStartBound = 0;\n\n offsetYOfEndBound = 0;\n\n offsetY = 0;\n\n offsetYOfStart = 0;\n\n offsetYOfEnd = 0;\n\n curValue: string | null = '';\n\n onChange: (index: number) => void;\n\n itemGroupHeight = DEFAULT_HOLDER_HEIGHT;\n\n indicatorOffset = 0;\n\n pickerColumns: PickerColumn;\n\n // wheelConfig 实例属性\n inertiaDuration: number;\n\n bounceDuration: number;\n\n transitionDuration: number;\n\n inertiaTimeThreshold: number;\n\n inertiaDistanceThreshold: number;\n\n boundOffset: number;\n\n clickDistanceThreshold: number;\n\n clickTimeThreshold: number;\n\n // ResizeObserver 用于监听尺寸变化\n private resizeObserver: ResizeObserver | null = null;\n\n // 标记是否已初始化完成高度计算\n private heightInitialized = false;\n\n constructor(options: PickerOptions) {\n if (!options.el) throw new Error('options el needed!');\n this.holder = options.el;\n this.pickerColumns = options.defaultPickerColumns;\n this.options = options;\n this.onChange = options.onChange;\n\n // 直接使用传入的 wheelConfig(已由组件合并好默认值)\n const { wheelConfig } = options;\n this.inertiaDuration = wheelConfig.inertiaDuration;\n this.bounceDuration = wheelConfig.bounceDuration;\n this.transitionDuration = wheelConfig.transitionDuration;\n this.inertiaTimeThreshold = wheelConfig.inertiaTimeThreshold;\n this.inertiaDistanceThreshold = wheelConfig.inertiaDistanceThreshold;\n this.boundOffset = wheelConfig.boundOffset;\n this.clickDistanceThreshold = wheelConfig.clickDistanceThreshold;\n this.clickTimeThreshold = wheelConfig.clickTimeThreshold;\n\n this.init();\n }\n\n init(): void {\n // 惯性滚动\n this.initScrollParams();\n // item 样式\n this.setSelectedClassName();\n // 绑定事件\n this.bindEvent();\n // 监听尺寸变化,适配 popup 场景和 CSS 变量动态生效\n this.observeResize();\n }\n\n /**\n * @description 使用 ResizeObserver 监听元素尺寸变化\n */\n observeResize(): void {\n if (typeof ResizeObserver === 'undefined') return;\n\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { height } = entry.contentRect;\n // 当高度从 0 变为有效值,或高度发生变化时,重新计算\n if (height > 0) {\n const newItemHeight = this.getFirstItemHeight();\n const newGroupHeight = this.holder.parentElement?.offsetHeight || DEFAULT_HOLDER_HEIGHT;\n\n // 只有当高度有效且发生变化时才更新\n if (\n newItemHeight > 0 &&\n newGroupHeight > 0 &&\n (newItemHeight !== this.itemHeight || newGroupHeight !== this.itemGroupHeight || !this.heightInitialized)\n ) {\n this.heightInitialized = true;\n this.recalculateHeights();\n // 重新定位到当前选中项\n this.updateIndex(this.curIndex, { isChange: false, duration: 0 });\n }\n }\n }\n });\n\n // 同时观察 holder 和其父元素\n this.resizeObserver.observe(this.holder);\n if (this.holder.parentElement) {\n this.resizeObserver.observe(this.holder.parentElement);\n }\n }\n\n /**\n * @description 获取第一个 li 元素的高度,优先使用已缓存的 elementItems\n */\n private getFirstItemHeight(): number {\n const firstItem = this.elementItems[0] || this.holder.querySelector('li');\n return firstItem?.offsetHeight || DEFAULT_ITEM_HEIGHT;\n }\n\n /**\n * @description 获取所有的列表DOM元素,并重新计算高度相关参数\n */\n updateItems(): void {\n this.elementItems = [...this.holder.querySelectorAll('li')];\n // 重新获取实际高度,以支持 CSS 变量和 postcss-pxtorem 等场景\n this.recalculateHeights();\n }\n\n /**\n * @description 重新计算高度相关参数,适配 CSS 变量和 rem 转换场景\n */\n recalculateHeights(): void {\n const newItemHeight = this.getFirstItemHeight();\n const newGroupHeight = this.holder.parentElement?.offsetHeight || DEFAULT_HOLDER_HEIGHT;\n\n // 高度发生变化时更新所有相关参数\n if (newItemHeight !== this.itemHeight || newGroupHeight !== this.itemGroupHeight) {\n this.itemHeight = newItemHeight;\n this.itemGroupHeight = newGroupHeight;\n this.indicatorOffset = this.itemGroupHeight / 2 - this.itemHeight / 2;\n }\n\n // 边界值需要根据当前 elementItems 数量计算,每次都更新\n const itemLen = this.elementItems.length;\n if (itemLen > 0) {\n this.offsetYOfStart = this.indicatorOffset;\n this.offsetYOfEnd = this.indicatorOffset - (itemLen - 1) * this.itemHeight;\n this.offsetYOfStartBound = this.indicatorOffset + this.boundOffset;\n this.offsetYOfEndBound = this.indicatorOffset - (itemLen - 1) * this.itemHeight - this.boundOffset;\n }\n }\n\n /**\n * @description 初始化滚动参数\n */\n initScrollParams(): void {\n this.list = this.holder as HTMLUListElement;\n this.elementItems = [...this.holder.querySelectorAll('li')];\n this.itemGroupHeight = this.holder.parentElement?.offsetHeight || DEFAULT_HOLDER_HEIGHT;\n this.itemHeight = this.getFirstItemHeight();\n this.indicatorOffset = this.itemGroupHeight / 2 - this.itemHeight / 2;\n\n // 设置 class 名称\n this.itemClassName = `${classPrefix.value}-picker-item__item`;\n this.itemSelectedClassName = `${classPrefix.value}-picker-item__item--active`;\n\n // 处理默认选中索引\n let curIndex = findIndexOfEnabledOption(this.pickerColumns, this.options.defaultIndex || 0, this.options.keys);\n if (curIndex !== (this.options.defaultIndex || 0)) {\n this.onChange(curIndex);\n }\n\n this.curValue = this.elementItems[curIndex]?.textContent;\n\n // 使用 Object.defineProperty 确保 curIndex 变化时同步更新 curValue\n Object.defineProperty(this, 'curIndex', {\n set: (value: number) => {\n curIndex = value;\n this.curValue = this.elementItems[value]?.textContent;\n },\n get() {\n return curIndex;\n },\n });\n\n // 计算初始偏移和边界值\n const itemLen = this.elementItems.length;\n const startOffsetY = this.indicatorOffset - this.curIndex * this.itemHeight;\n this.setOffsetY(startOffsetY);\n this.offsetYOfStart = this.indicatorOffset;\n this.offsetYOfEnd = this.indicatorOffset - (itemLen - 1) * this.itemHeight;\n this.offsetYOfStartBound = this.indicatorOffset + this.boundOffset;\n this.offsetYOfEndBound = this.indicatorOffset - (itemLen - 1) * this.itemHeight - this.boundOffset;\n }\n\n bindEvent(): void {\n this.holder.addEventListener('touchstart', (e) => this.touchStartHandler(e as TouchEvent), false);\n this.holder.addEventListener('touchmove', (e) => this.touchMoveHandler(e as TouchEvent), false);\n this.holder.addEventListener('touchend', (e) => this.touchEndHandler(e as TouchEvent), false);\n this.holder.addEventListener('touchcancel', (e) => this.touchEndHandler(e as TouchEvent), false);\n }\n\n touchStartHandler(event: TouchEvent): void {\n preventDefault(event, false);\n this.isPicking = true;\n if (!this.holder) return;\n if (this.list) this.list.style.transition = '';\n this.startY = event.changedTouches[0].pageY;\n this.offsetYOfStart = this.offsetY;\n // 更新惯性参数\n this.updateInertiaParams(event, true);\n }\n\n getCount() {\n return this.pickerColumns.length;\n }\n\n getRange(thresholdA = 0, thresholdB = 3) {\n const min = -(this.getCount() - thresholdA) * this.itemHeight;\n const max = thresholdB * this.itemHeight;\n return { min, max };\n }\n\n touchMoveHandler(event: TouchEvent): void {\n preventDefault(event, false);\n if (!this.isPicking || !this.holder) return;\n\n const endY = event.changedTouches[0].pageY;\n const dragRange = endY - this.startY;\n this.updateInertiaParams(event, false);\n\n const { min, max } = this.getRange(0, 5);\n const moveOffsetY = limitNumberInRange(this.offsetYOfStart + dragRange, min, max);\n this.setOffsetY(moveOffsetY);\n }\n\n touchEndHandler(event: TouchEvent): void {\n preventDefault(event, false);\n this.isPicking = false;\n if (!this.holder) return;\n const point = event.changedTouches[0];\n const nowTime = event.timeStamp || Date.now();\n\n const moveTime = nowTime - this.lastMoveTime;\n const distance = point.pageY - this.lastMoveStart;\n const absDistance = Math.abs(distance);\n\n if (absDistance < this.clickDistanceThreshold && moveTime < this.clickTimeThreshold) {\n // 点选操作,查找 li\n const li = (event.target as HTMLElement).closest('li');\n if (li && this.list?.contains(li)) {\n const childElements = this.list.children;\n const rawIndex = Array.from(childElements).indexOf(li);\n const enabledIndex = findIndexOfEnabledOption(this.pickerColumns, rawIndex, this.options.keys);\n this.updateIndex(enabledIndex, { isChange: true });\n return;\n }\n }\n // 超出一定时间不再惯性滚动\n if (moveTime > this.inertiaTimeThreshold || absDistance < this.inertiaDistanceThreshold || !this.inertiaDuration) {\n this.stopInertiaMove = false;\n this.endScroll();\n return;\n }\n\n const speed = Math.abs(distance / moveTime);\n let dist = this.offsetY + (speed / 0.005) * (distance < 0 ? -1 : 1);\n const { min, max } = this.getRange(3, 2);\n dist = limitNumberInRange(dist, min, max);\n if (dist === 0) {\n this.stopInertiaMove = false;\n this.endScroll();\n return;\n }\n this.scrollDist(this.offsetY, dist, this.inertiaDuration);\n }\n\n /**\n * @description 更新惯性参数\n * @param event\n * @param isStart\n */\n updateInertiaParams(event: TouchEvent, isStart: boolean): void {\n const point = event.changedTouches[0];\n if (isStart) {\n this.lastMoveStart = point.pageY;\n this.lastMoveTime = event.timeStamp || Date.now();\n }\n this.stopInertiaMove = true;\n }\n\n /**\n * @description 根据计算的物理惯性距离滚动\n * @param startOffsetY\n * @param dist\n * @param duration\n */\n scrollDist(startOffsetY: number, dist: number, duration: number): void {\n this.stopInertiaMove = false;\n let start: any = null;\n const inertiaMove = (timestamp: number) => {\n if (this.stopInertiaMove) {\n return;\n }\n if (!start) start = timestamp;\n const progress = timestamp - start;\n const newOffsetY = quartEaseOut(progress, startOffsetY, dist - startOffsetY, duration);\n this.setOffsetY(newOffsetY);\n if (progress > duration || newOffsetY > this.offsetYOfStartBound || newOffsetY < this.offsetYOfEndBound) {\n this.endScroll();\n } else {\n window.requestAnimationFrame(inertiaMove);\n }\n };\n window.requestAnimationFrame(inertiaMove);\n }\n\n /**\n * @description 更新picker,一般当数据变化需要ui更新的时候调用\n */\n update(options?: any): void {\n this.updateItems();\n const targetIndex = this.elementItems.findIndex((el: HTMLLIElement) => el.textContent === this.curValue);\n const updateIndex = targetIndex === -1 ? 0 : targetIndex;\n this.updateIndex(updateIndex, options);\n }\n\n /**\n * @description 更新picker索引,数据变化时调用\n * @param index\n * @param duration\n */\n updateIndex(index: number, options?: any): void {\n const realOptions = {\n duration: this.transitionDuration,\n isChange: true,\n ...options,\n };\n this.curIndex = index;\n this.setSelectedClassName();\n const moveOffsetY = this.indicatorOffset - index * this.itemHeight;\n if (this.list) {\n this.list.style.transform = `translate(0,${moveOffsetY}px) translateZ(0)`;\n this.list.style.transitionDuration = `${realOptions.duration}ms`;\n this.list.style.transitionTimingFunction = 'ease-out';\n }\n\n this.offsetY = moveOffsetY;\n this.offsetYOfStart = moveOffsetY;\n realOptions.isChange && this.onChange(index);\n }\n\n /**\n * @description 更新数据源\n */\n updateOptions(options: PickerColumn = []): void {\n this.pickerColumns = options;\n }\n\n /**\n * @description 获取当前索引\n */\n getCurIndex(): number {\n return this.curIndex;\n }\n\n /**\n * @description 设置item样式\n */\n setSelectedClassName(): void {\n const regClass = new RegExp(this.itemClassName, 'i');\n const regSelected = new RegExp(this.itemSelectedClassName, 'i');\n this.elementItems.forEach((item, i) => {\n const tempItem = item;\n const itemClass = tempItem.className;\n if (itemClass === '' || !itemClass) {\n tempItem.className = this.itemClassName;\n } else {\n if (!regClass.test(itemClass)) {\n tempItem.classList.add(this.itemClassName);\n }\n if (regSelected.test(itemClass)) {\n tempItem.classList.remove(this.itemSelectedClassName);\n }\n }\n if (this.curIndex === i) {\n tempItem.classList.add(this.itemSelectedClassName);\n }\n });\n }\n\n /**\n * 设置当前picker的滚动位移\n * @param offsetY\n */\n setOffsetY(offsetY: number): void {\n this.offsetY = offsetY;\n if (this.list) {\n this.list.style.transform = `translate3d(0, ${offsetY}px, 0)`;\n }\n }\n\n /**\n * @description 结束滚动时的回调\n */\n endScroll(): void {\n if (this.stopInertiaMove) return;\n\n // 设置回弹动画\n if (this.list) {\n this.list.style.transition = `${this.bounceDuration}ms ease-out`;\n }\n\n let curIndex = 0;\n if (this.offsetY > this.offsetYOfStartBound) {\n curIndex = 0;\n } else if (this.offsetY < this.offsetYOfEndBound) {\n curIndex = this.elementItems.length - 1;\n } else {\n curIndex = -Math.round((this.offsetY - this.indicatorOffset) / this.itemHeight);\n curIndex = Math.max(0, Math.min(curIndex, this.elementItems.length - 1));\n }\n\n curIndex = findIndexOfEnabledOption(this.pickerColumns, curIndex, this.options.keys);\n\n const offsetY = this.indicatorOffset - curIndex * this.itemHeight;\n this.setOffsetY(offsetY);\n\n if (curIndex !== this.curIndex) {\n this.curIndex = curIndex;\n this.setSelectedClassName();\n this.onChange(this.curIndex);\n }\n }\n\n destroy(): void {\n // 清理 ResizeObserver\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n // @ts-ignore: TODO\n delete this.holder;\n }\n}\n\nexport default Picker;\n"],"names":["classPrefix","usePrefixClass","quartEaseOut","t","b","c","d","tempT","DEFAULT_ITEM_HEIGHT","DEFAULT_HOLDER_HEIGHT","Picker","options","_classCallCheck","_defineProperty","el","Error","holder","pickerColumns","defaultPickerColumns","onChange","wheelConfig","inertiaDuration","bounceDuration","transitionDuration","inertiaTimeThreshold","inertiaDistanceThreshold","boundOffset","clickDistanceThreshold","clickTimeThreshold","init","_createClass","key","value","initScrollParams","setSelectedClassName","bindEvent","observeResize","_this","ResizeObserver","resizeObserver","entries","_iterator","_createForOfIteratorHelper","_step","s","n","done","entry","height","contentRect","_this$holder$parentEl","newItemHeight","getFirstItemHeight","newGroupHeight","parentElement","offsetHeight","itemHeight","itemGroupHeight","heightInitialized","recalculateHeights","updateIndex","curIndex","isChange","duration","err","e","f","observe","firstItem","elementItems","querySelector","updateItems","querySelectorAll","_this$holder$parentEl2","indicatorOffset","itemLen","length","offsetYOfStart","offsetYOfEnd","offsetYOfStartBound","offsetYOfEndBound","_this$holder$parentEl3","_this$elementItems$cu","_this2","list","itemClassName","concat","itemSelectedClassName","findIndexOfEnabledOption","defaultIndex","keys","curValue","textContent","Object","defineProperty","set","_this2$elementItems$v","get","startOffsetY","setOffsetY","_this3","addEventListener","touchStartHandler","touchMoveHandler","touchEndHandler","event","preventDefault","isPicking","style","transition","startY","changedTouches","pageY","offsetY","updateInertiaParams","getCount","getRange","thresholdA","arguments","undefined","thresholdB","min","max","endY","dragRange","_this$getRange","moveOffsetY","limitNumberInRange","point","nowTime","timeStamp","Date","now","moveTime","lastMoveTime","distance","lastMoveStart","absDistance","Math","abs","_this$list","li","target","closest","contains","childElements","children","rawIndex","Array","from","indexOf","enabledIndex","stopInertiaMove","endScroll","speed","dist","_this$getRange2","scrollDist","isStart","_this4","start","inertiaMove","timestamp","progress","newOffsetY","window","requestAnimationFrame","update","_this5","targetIndex","findIndex","index","realOptions","_objectSpread","transform","transitionTimingFunction","updateOptions","getCurIndex","_this6","regClass","RegExp","regSelected","forEach","item","i","tempItem","itemClass","className","test","classList","add","remove","round","destroy","disconnect"],"mappings":"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"}