UNPKG

tdesign-mobile-vue

Version:
1 lines 30.1 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 } 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 swipeDuration?: string | number;\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;\nconst OFFSET_OF_BOUND = 60;\nexport const ANIMATION_TIME_LIMIT = 460;\nexport const ANIMATION_DISTANCE_LIMIT = 15;\nconst ANIMATION_DURATION = 150;\nconst DEFAULT_SWIPE_DURATION = 1000;\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 height: number = DEFAULT_HOLDER_HEIGHT;\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: number = OFFSET_OF_BOUND;\n\n offsetYOfEndBound: number = -OFFSET_OF_BOUND;\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: number;\n\n indicatorOffset: number;\n\n swipeDuration?: number | string;\n\n pickerColumns: PickerColumn;\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 this.swipeDuration = options.swipeDuration ?? DEFAULT_SWIPE_DURATION;\n\n this.init();\n }\n\n init(): void {\n // 惯性滚动\n this.initScrollParams();\n // item 样式\n this.setSelectedClassName();\n // 绑定事件\n this.bindEvent();\n }\n\n /**\n * @description 获取所有的列表DOM元素\n */\n updateItems(): void {\n this.elementItems = [...this.holder.querySelectorAll('li')];\n const itemLen = this.elementItems.length;\n this.offsetYOfEnd = -this.itemHeight * (itemLen - 3);\n this.offsetYOfEndBound = -(this.itemHeight * (itemLen - 3) + OFFSET_OF_BOUND);\n }\n\n /**\n * @description 初始化滚动参数\n */\n initScrollParams(): void {\n this.list = this.holder as HTMLUListElement;\n this.itemGroupHeight = this.holder.parentElement?.offsetHeight || DEFAULT_HOLDER_HEIGHT;\n this.elementItems = [...this.holder.querySelectorAll('li')];\n this.itemHeight = this.holder.querySelector('li')?.offsetHeight || DEFAULT_ITEM_HEIGHT;\n this.height = this.holder.offsetHeight || DEFAULT_HOLDER_HEIGHT;\n this.indicatorOffset = this.itemGroupHeight / 2 - this.itemHeight / 2;\n let curIndex = findIndexOfEnabledOption(this.pickerColumns, this.options.defaultIndex || 0, this.options.keys);\n this.itemClassName = `${classPrefix.value}-picker-item__item`;\n this.itemSelectedClassName = `${classPrefix.value}-picker-item__item--active`;\n this.startY = 0;\n this.isPicking = false;\n this.lastMoveTime = 0;\n this.lastMoveStart = 0;\n this.stopInertiaMove = false;\n this.curValue = this.elementItems[curIndex]?.textContent;\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 const startOffsetY = this.indicatorOffset - this.curIndex * this.itemHeight;\n const itemLen = this.elementItems.length;\n this.setOffsetY(startOffsetY);\n this.offsetYOfStart = startOffsetY;\n this.offsetYOfEnd = this.indicatorOffset - (itemLen - 1) * this.itemHeight;\n this.offsetYOfStartBound = this.indicatorOffset + OFFSET_OF_BOUND;\n this.offsetYOfEndBound = this.indicatorOffset - (itemLen - 1) * this.itemHeight - OFFSET_OF_BOUND;\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 // move time gap\n const moveTime = nowTime - this.lastMoveTime;\n const distance = point.pageY - this.lastMoveStart;\n // 超出一定时间不再惯性滚动\n if (moveTime > ANIMATION_TIME_LIMIT || Math.abs(distance) < ANIMATION_DISTANCE_LIMIT || !this.swipeDuration) {\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\n if (dist === 0) {\n this.stopInertiaMove = false;\n this.endScroll();\n return;\n }\n this.scrollDist(nowTime, this.offsetY, dist, +this.swipeDuration);\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 now\n * @param startOffsetY\n * @param dist\n * @param duration\n */\n scrollDist(now: number, 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: 460,\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 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 适配3d, TBD\n * @param index\n */\n fix3d(index: number): void {\n for (let i = 0; i < this.elementItems.length; i++) {\n const deg = 25 * (-index + i);\n this.elementItems[i].style.transform = `rotateX(${deg}deg)`;\n this.elementItems[i].style.webkitTransform = `rotateX(${deg}deg)`;\n }\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 let curIndex = 0;\n if (this.offsetY > this.offsetYOfStartBound) {\n curIndex = 0;\n if (this.list) {\n this.list.style.transition = `${ANIMATION_DURATION}ms ease-out`;\n }\n } else if (this.offsetY < this.offsetYOfEndBound) {\n curIndex = this.elementItems.length - 1;\n if (this.list) {\n this.list.style.transition = `${ANIMATION_DURATION}ms ease-out`;\n }\n } else {\n if (this.list) {\n this.list.style.transition = `${ANIMATION_DURATION}ms ease-out`;\n }\n curIndex = -Math.round((this.offsetY - this.indicatorOffset) / this.itemHeight);\n if (curIndex < 0) curIndex = 0;\n if (curIndex > this.elementItems.length - 1) 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 if (curIndex !== this.curIndex) {\n // 防止事件重复触发\n this.curIndex = curIndex;\n this.setSelectedClassName();\n this.onChange(this.curIndex);\n }\n }\n\n destroy(): void {\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","OFFSET_OF_BOUND","ANIMATION_TIME_LIMIT","ANIMATION_DISTANCE_LIMIT","ANIMATION_DURATION","DEFAULT_SWIPE_DURATION","Picker","options","_options$swipeDuratio","_classCallCheck","_defineProperty","el","Error","holder","pickerColumns","defaultPickerColumns","onChange","swipeDuration","init","_createClass","key","value","initScrollParams","setSelectedClassName","bindEvent","updateItems","elementItems","querySelectorAll","itemLen","length","offsetYOfEnd","itemHeight","offsetYOfEndBound","_this$holder$parentEl","_this$holder$querySel","_this$elementItems$cu","_this","list","itemGroupHeight","parentElement","offsetHeight","querySelector","height","indicatorOffset","curIndex","findIndexOfEnabledOption","defaultIndex","keys","itemClassName","concat","itemSelectedClassName","startY","isPicking","lastMoveTime","lastMoveStart","stopInertiaMove","curValue","textContent","Object","defineProperty","set","_this$elementItems$va","get","startOffsetY","setOffsetY","offsetYOfStart","offsetYOfStartBound","_this2","addEventListener","e","touchStartHandler","touchMoveHandler","touchEndHandler","event","preventDefault","style","transition","changedTouches","pageY","offsetY","updateInertiaParams","getCount","getRange","thresholdA","arguments","undefined","thresholdB","min","max","endY","dragRange","_this$getRange","moveOffsetY","limitNumberInRange","point","nowTime","timeStamp","Date","now","moveTime","distance","Math","abs","endScroll","speed","dist","_this$getRange2","scrollDist","isStart","duration","_this3","start","inertiaMove","timestamp","progress","newOffsetY","window","requestAnimationFrame","update","_this4","targetIndex","findIndex","updateIndex","index","realOptions","_objectSpread","isChange","transform","transitionDuration","transitionTimingFunction","updateOptions","getCurIndex","fix3d","i","deg","webkitTransform","_this5","regClass","RegExp","regSelected","forEach","item","tempItem","itemClass","className","test","classList","add","remove","round","destroy"],"mappings":"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"}