UNPKG

tdesign-mobile-vue

Version:
1 lines 9.71 kB
{"version":3,"file":"tween.mjs","sources":["../../../../src/_common/js/statistic/tween.ts"],"sourcesContent":["/**\n * Inspired by https://github.com/PengJiyuan/b-tween\n * requestAnimationFrame https://caniuse.com/requestanimationframe\n * TDesign vue 2 need to ensure compatibility with users who are using IE and Vue2,\n * it is necessary to use setInterval instead of requestAnimationFrame when the browser version is less than 9\n */\nimport { getIEVersion } from '../utils/helper';\n\nexport interface TweenSettings {\n from: Record<string, number>;\n to: Record<string, number>;\n duration?: number;\n delay?: number;\n onStart?: (keys: Record<string, number>) => void;\n onUpdate?: (keys: Record<string, number>) => void;\n onFinish?: (keys: Record<string, number>) => void;\n}\n\nconst quartOut = (t: number) => 1 - Math.abs((t - 1) ** 4);\n\nexport default class Tween {\n private from: Record<string, number>;\n\n private to: Record<string, number>;\n\n private duration: number;\n\n private onStart?: (keys: Record<string, number>) => void;\n\n private onUpdate: (keys: Record<string, number>) => void;\n\n private onFinish?: (keys: Record<string, number>) => void;\n\n private startTime: number;\n\n private started: boolean;\n\n private finished: boolean;\n\n private timer: number | NodeJS.Timer | null;\n\n private keys: Record<string, number>;\n\n constructor({\n from,\n to,\n duration = 200,\n onStart,\n onUpdate = () => {},\n onFinish,\n }: TweenSettings) {\n this.from = from;\n this.to = to;\n this.duration = duration;\n this.onStart = onStart;\n this.onUpdate = onUpdate;\n this.onFinish = onFinish;\n this.startTime = Date.now();\n this.started = false;\n this.finished = false;\n this.timer = null;\n this.keys = {};\n Object.entries(from).forEach(([key, value]) => {\n if (this.to[key] === undefined) {\n this.to[key] = value;\n }\n });\n\n Object.entries(to).forEach(([key, value]) => {\n if (this.from[key] === undefined) {\n this.from[key] = value;\n }\n });\n }\n\n private time = 0;\n\n private elapsed = 0;\n\n private update() {\n this.time = Date.now();\n if (this.time < this.startTime || this.finished) return;\n\n if (this.elapsed >= this.duration) {\n this.finished = true;\n this.onFinish?.(this.keys);\n return;\n }\n const elapsed = Math.min(this.time - this.startTime, this.duration);\n this.elapsed = elapsed;\n const progress = quartOut(elapsed / this.duration);\n\n Object.keys(this.to).forEach((key) => {\n const delta = this.to[key] - this.from[key];\n this.keys[key] = this.from[key] + delta * progress;\n });\n\n if (!this.started) {\n this.onStart?.(this.keys);\n this.started = true;\n }\n\n this.onUpdate(this.keys);\n }\n\n private polyfillStart() {\n const elapsed = Date.now() - this.startTime;\n const interval = quartOut(elapsed / this.duration);\n\n this.timer = setInterval(() => {\n this.update();\n if (this.finished) {\n clearInterval(this.timer as number);\n }\n }, interval);\n }\n\n private normalStart() {\n const tick = () => {\n this.update();\n this.timer = requestAnimationFrame(tick);\n\n if (this.finished) {\n cancelAnimationFrame(this.timer);\n this.timer = null;\n }\n };\n tick();\n }\n\n public start() {\n this.startTime = Date.now();\n // IE < 10\n if (getIEVersion() < 10) this.polyfillStart();\n else this.normalStart();\n }\n\n public stop() {\n // IE < 10\n if (getIEVersion() < 10) clearInterval(this.timer as number);\n else cancelAnimationFrame(this.timer as number);\n this.timer = null;\n }\n}\n"],"names":["quartOut","t","Math","abs","pow","Tween","_ref","_this","from","to","_ref$duration","duration","onStart","_ref$onUpdate","onUpdate","onFinish","_classCallCheck","_defineProperty","startTime","Date","now","started","finished","timer","keys","Object","entries","forEach","_ref2","_ref3","_slicedToArray","key","value","_ref4","_ref5","_createClass","update","_this2","time","elapsed","_this$onFinish","call","min","progress","delta","_this$onStart","polyfillStart","_this3","interval","setInterval","clearInterval","normalStart","_this4","tick","requestAnimationFrame","cancelAnimationFrame","start","getIEVersion","stop"],"mappings":"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"}