UNPKG

tdesign-mobile-vue

Version:
1 lines 27.2 kB
{"version":3,"file":"picker.class.mjs","sources":["../../src/picker/picker.class.ts"],"sourcesContent":["import { preventDefault } from '../shared/dom';\nimport { usePrefixClass } from '../hooks/useClass';\n\nconst classPrefix = usePrefixClass();\n\nexport interface PickerOptions {\n defaultIndex?: number;\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 constructor(options: PickerOptions) {\n if (!options.el) throw new Error('options el needed!');\n this.holder = options.el;\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 = this.options.defaultIndex || 0;\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 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 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","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","defaultIndex","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","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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"}