UNPKG

tdesign-mobile-vue

Version:
1 lines 28.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 } from './type';\nimport { KeysType } from '../common';\nimport { findIndexOfEnabledOption } 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}\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;\nconst ANIMATION_DURATION = 150;\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 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.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 // 更新惯性参数\n this.updateInertiaParams(event, true);\n }\n\n touchMoveHandler(event: TouchEvent): void {\n preventDefault(event, false);\n if (!this.isPicking || !this.holder) return;\n const endY = event.changedTouches[0].pageY;\n const dragRange = endY - this.startY;\n this.updateInertiaParams(event, false);\n const moveOffsetY = this.indicatorOffset - this.curIndex * this.itemHeight + dragRange;\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 // 超出一定时间不再惯性滚动\n if (moveTime > ANIMATION_TIME_LIMIT) {\n this.stopInertiaMove = false;\n this.endScroll();\n return;\n }\n // 手指滑动的速度\n const v = (point.pageY - this.lastMoveStart) / moveTime;\n // 加速度方向\n const dir = v > 0 ? -1 : 1;\n // 摩擦系数,参考iscroll的阻尼系数\n const dampingCoefficient = 0.0008;\n // 加速度\n const deceleration = -1 * dir * dampingCoefficient;\n // 滚动持续时间\n const duration = Math.abs(v / deceleration);\n const endY = event.changedTouches[0].pageY;\n const dragRange = endY - this.startY;\n // 滚动距离\n const dist = v * duration - (duration ** 2 * deceleration) / 2 + dragRange;\n if (dist === 0) {\n this.stopInertiaMove = false;\n this.endScroll();\n return;\n }\n this.scrollDist(nowTime, this.offsetY, dist, duration);\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, 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_DURATION","Picker","options","_classCallCheck","_defineProperty","el","Error","holder","pickerColumns","defaultPickerColumns","onChange","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","updateInertiaParams","endY","dragRange","moveOffsetY","point","nowTime","timeStamp","Date","now","moveTime","endScroll","v","dir","dampingCoefficient","deceleration","duration","Math","abs","dist","pow","scrollDist","offsetY","isStart","_this3","start","inertiaMove","timestamp","progress","newOffsetY","window","requestAnimationFrame","update","_this4","targetIndex","findIndex","updateIndex","index","realOptions","_objectSpread","isChange","transform","transitionDuration","transitionTimingFunction","updateOptions","arguments","undefined","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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"}