@vnpn/lucky-canvas-core 1.7.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.js","sources":["../src/utils/polyfill.js","../src/utils/index.ts","../src/observer/dep.ts","../src/observer/utils.ts","../src/observer/array.ts","../src/observer/index.ts","../src/observer/watcher.ts","../src/lib/lucky.ts","../src/utils/math.ts","../src/utils/tween.ts","../src/lib/wheel.ts","../src/lib/grid.ts","../src/lib/slot.ts","../src/utils/image.ts"],"sourcesContent":["/**\n * 由于部分低版本下的某些 app 可能会缺少某些原型方法, 这里增加兼容\n */\n\n// ie11 不兼容 includes 方法\nif (!Array.prototype.includes) {\n Object.defineProperty(Array.prototype, 'includes', {\n value: function(valueToFind, fromIndex) {\n\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n // 1. Let O be ? ToObject(this value).\n var o = Object(this);\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n\n // 3. If len is 0, return false.\n if (len === 0) {\n return false;\n }\n\n // 4. Let n be ? ToInteger(fromIndex).\n // (If fromIndex is undefined, this step produces the value 0.)\n var n = fromIndex | 0;\n\n // 5. If n ≥ 0, then\n // a. Let k be n.\n // 6. Else n < 0,\n // a. Let k be len + n.\n // b. If k < 0, let k be 0.\n var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n function sameValueZero(x, y) {\n return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));\n }\n\n // 7. Repeat, while k < len\n while (k < len) {\n // a. Let elementK be the result of ? Get(O, ! ToString(k)).\n // b. If SameValueZero(valueToFind, elementK) is true, return true.\n if (sameValueZero(o[k], valueToFind)) {\n return true;\n }\n // c. Increase k by 1.\n k++;\n }\n\n // 8. Return false\n return false;\n }\n });\n}\n\n// vivo x7 下网易云游戏 app 缺少 includes 方法\nif (!String.prototype.includes) {\n String.prototype.includes = function(search, start) {\n 'use strict';\n if (typeof start !== 'number') {\n start = 0;\n }\n if (start + search.length > this.length) {\n return false;\n } else {\n return this.indexOf(search, start) !== -1;\n }\n };\n}\n\n// vivo x7 下网易云游戏 app 缺少 find 方法\nif (!Array.prototype.find) {\n Object.defineProperty(Array.prototype, 'find', {\n value: function(predicate) {\n // 1. Let O be ? ToObject(this value).\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n var o = Object(this);\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n var thisArg = arguments[1];\n // 5. Let k be 0.\n var k = 0;\n // 6. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ! ToString(k).\n // b. Let kValue be ? Get(O, Pk).\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n // d. If testResult is true, return kValue.\n var kValue = o[k];\n if (predicate.call(thisArg, kValue, k, o)) {\n return kValue;\n }\n // e. Increase k by 1.\n k++;\n }\n // 7. Return undefined.\n return void 0;\n }\n });\n}\n","/**\n * 判断是否是期望的类型\n * @param { unknown } param 将要判断的变量\n * @param { ...string } types 期望的类型\n * @return { boolean } 返回期望是否正确\n */\nexport const isExpectType = (param: unknown, ...types: string[]): boolean => {\n return types.some(type => Object.prototype.toString.call(param).slice(8, -1).toLowerCase() === type)\n}\n\nexport const get = (data: object, strKeys: string) => {\n const keys = strKeys.split('.')\n for (let key of keys) {\n const res = data[key]\n if (!isExpectType(res, 'object', 'array')) return res\n data = res\n }\n return data\n}\n\nexport const has = (data: object, key: string | number): boolean => {\n return Object.prototype.hasOwnProperty.call(data, key)\n}\n\n/**\n * 移除\\n\n * @param { string } str 将要处理的字符串\n * @return { string } 返回新的字符串\n */\nexport const removeEnter = (str: string): string => {\n return [].filter.call(str, s => s !== '\\n').join('')\n}\n\n/**\n * 把任何数据类型转成数字\n * @param num \n */\nexport const getNumber = (num: unknown): number => {\n if (num === null) return 0\n if (typeof num === 'object') return NaN\n if (typeof num === 'number') return num\n if (typeof num === 'string') {\n if (num[num.length - 1] === '%') {\n return Number(num.slice(0, -1)) / 100\n }\n return Number(num)\n }\n return NaN\n}\n\n/**\n * 判断颜色是否有效 (透明色 === 无效)\n * @param color 颜色\n */\nexport const hasBackground = (color: string | undefined | null): boolean => {\n if (typeof color !== 'string') return false\n color = color.toLocaleLowerCase().trim()\n if (color === 'transparent') return false\n if (/^rgba/.test(color)) {\n const alpha = /([^\\s,]+)\\)$/.exec(color)\n if (getNumber(alpha) === 0) return false\n }\n return true\n}\n\n/**\n * 通过padding计算\n * @return { object } block 边框信息\n */\nexport const computePadding = (\n block: { padding?: string },\n getLength: Function\n): [number, number, number, number] => {\n let padding = block.padding?.split(' ').map(n => getLength(n)) || [0],\n paddingTop = 0,\n paddingBottom = 0,\n paddingLeft = 0,\n paddingRight = 0\n switch (padding.length) {\n case 1:\n paddingTop = paddingBottom = paddingLeft = paddingRight = padding[0]\n break\n case 2:\n paddingTop = paddingBottom = padding[0]\n paddingLeft = paddingRight = padding[1]\n break\n case 3:\n paddingTop = padding[0]\n paddingLeft = paddingRight = padding[1]\n paddingBottom = padding[2]\n break\n default:\n paddingTop = padding[0]\n paddingBottom = padding[1]\n paddingLeft = padding[2]\n paddingRight = padding[3]\n }\n // 检查是否单独传入值, 并且不是0\n const res = { paddingTop, paddingBottom, paddingLeft, paddingRight }\n for (let key in res) {\n // 是否含有这个属性, 并且是数字或字符串\n res[key] = has(block, key) && isExpectType(block[key], 'string', 'number')\n ? getLength(block[key])\n : res[key]\n }\n return [paddingTop, paddingBottom, paddingLeft, paddingRight]\n}\n\n/**\n * 节流函数\n * @param fn 将要处理的函数\n * @param wait 时间, 单位为毫秒\n * @returns 包装好的节流函数\n */\nexport const throttle = (fn: Function, wait = 300) => {\n let timeId = null as any\n return function (this: any, ...args: any[]) {\n if (timeId) return\n timeId = setTimeout(() => {\n fn.apply(this, args)\n clearTimeout(timeId)\n timeId = null\n }, wait)\n }\n}\n\n/**\n * 通过概率计算出一个奖品索引\n * @param { Array<number | undefined> } rangeArr 概率\n * @returns { number } 中奖索引\n */\nexport const computeRange = (rangeArr: Array<number | undefined>): number => {\n const ascendingArr: number[] = []\n // 额外增加 map 来优化 ts 的类型推断\n const sum = rangeArr.map(num => Number(num)).reduce((prev, curr) => {\n if (curr > 0) { // 大于0\n const res = prev + curr\n ascendingArr.push(res)\n return res\n } else { // 小于等于0或NaN\n ascendingArr.push(NaN)\n return prev\n }\n }, 0)\n const random = Math.random() * sum\n return ascendingArr.findIndex(num => random <= num)\n}\n\n/**\n * 根据宽度分割字符串, 来达到换行的效果\n * @param text \n * @param maxWidth \n * @returns \n */\nexport const splitText = (\n ctx: CanvasRenderingContext2D,\n text: string,\n getWidth: (lines: string[]) => number,\n lineClamp: number = Infinity\n): string[] => {\n // 如果 lineClamp 设置不正确, 则忽略该属性\n if (lineClamp <= 0) lineClamp = Infinity\n let str = ''\n const lines = []\n const EndWidth = ctx.measureText('...').width\n for (let i = 0; i < text.length; i++) {\n str += text[i]\n let currWidth = ctx.measureText(str).width\n const maxWidth = getWidth(lines)\n // 如果正在计算最后一行, 则加上三个小点的宽度\n if (lineClamp === lines.length + 1) currWidth += EndWidth\n // 如果已经没有宽度了, 就没有必要再计算了\n if (maxWidth < 0) return lines\n // 如果当前一行的宽度不够了, 则处理下一行\n if (currWidth > maxWidth) {\n lines.push(str.slice(0, -1))\n str = text[i]\n }\n // 如果现在是最后一行, 则加上三个小点并跳出\n if (lineClamp === lines.length) {\n lines[lines.length - 1] += '...'\n return lines\n }\n }\n if (str) lines.push(str)\n if (!lines.length) lines.push(text)\n return lines\n}\n\n// 获取一个重新排序的数组\nexport const getSortedArrayByIndex = <T>(arr: T[], order: number[]): T[] => {\n const map: { [key: number]: T } = {}, res = []\n for (let i = 0; i < arr.length; i++) {\n map[i] = arr[i]\n }\n for (let i = 0; i < order.length; i++) {\n const curr = map[order[i]]\n if (curr) (res[i] = curr)\n }\n return res\n}\n","import Watcher from './watcher'\n\nexport default class Dep {\n static target: Watcher | null\n private subs: Array<Watcher>\n\n /**\n * 订阅中心构造器\n */\n constructor () {\n this.subs = []\n }\n\n /**\n * 收集依赖\n * @param {*} sub \n */\n public addSub (sub: Watcher) {\n // 此处临时使用includes防重复添加\n if (!this.subs.includes(sub)) {\n this.subs.push(sub)\n }\n }\n\n /**\n * 派发更新\n */\n public notify () {\n this.subs.forEach(sub => {\n sub.update()\n })\n }\n}\n","\nimport { isExpectType } from '../utils'\n\nexport const hasProto = '__proto__' in {}\n\nexport function def (obj: object, key: string | number, val: any, enumerable?: boolean) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n })\n}\n\nexport function parsePath (path: string) {\n path += '.'\n let segments: string[] = [], segment = ''\n for (let i = 0; i < path.length; i++) {\n let curr = path[i]\n if (/\\[|\\./.test(curr)) {\n segments.push(segment)\n segment = ''\n } else if (/\\W/.test(curr)) {\n continue\n } else {\n segment += curr\n }\n }\n return function (data: object | any[]) {\n return segments.reduce((data, key) => {\n return data[key]\n }, data)\n }\n}\n\nexport function traverse (value: any) {\n // const seenObjects = new Set()\n const dfs = (data: any) => {\n if (!isExpectType(data, 'array', 'object')) return\n Object.keys(data).forEach(key => {\n const value = data[key]\n dfs(value)\n })\n }\n dfs(value)\n // seenObjects.clear()\n}","/**\n * 重写数组的原型方法\n */\nconst oldArrayProto = Array.prototype\nconst newArrayProto = Object.create(oldArrayProto)\nconst methods = ['push', 'pop', 'shift', 'unshift', 'sort', 'splice', 'reverse']\nmethods.forEach(method => {\n newArrayProto[method] = function (...args: any[]) {\n const res = oldArrayProto[method].apply(this, args)\n const luckyOb = this['__luckyOb__']\n if (['push', 'unshift', 'splice'].includes(method)) luckyOb.walk(this)\n luckyOb.dep.notify()\n return res\n }\n})\n\nexport { newArrayProto }\n","import Dep from './dep'\nimport { hasProto, def } from './utils'\nimport { newArrayProto } from './array'\n\nexport default class Observer {\n value: any\n dep: Dep\n\n /**\n * 观察者构造器\n * @param value \n */\n constructor (value: any) {\n // this.value = value\n this.dep = new Dep()\n // 将响应式对象代理到当前value上面, 并且将当前的enumerable设置为false\n def(value, '__luckyOb__', this)\n if (Array.isArray(value)) { // 如果是数组, 则重写原型方法\n if (hasProto) {\n value['__proto__'] = newArrayProto\n } else {\n Object.getOwnPropertyNames(newArrayProto).forEach(key => {\n def(value, key, newArrayProto[key])\n })\n }\n }\n this.walk(value)\n }\n\n walk (data: object | any[]) {\n Object.keys(data).forEach(key => {\n defineReactive(data, key, data[key])\n })\n }\n}\n\n/**\n * 处理响应式\n * @param { Object | Array } data\n */\nexport function observe (data: any): Observer | void {\n if (!data || typeof data !== 'object') return\n let luckyOb: Observer | void\n if ('__luckyOb__' in data) {\n luckyOb = data['__luckyOb__']\n } else {\n luckyOb = new Observer(data)\n }\n return luckyOb\n}\n\n/**\n * 重写 setter / getter\n * @param {*} data \n * @param {*} key \n * @param {*} val \n */\nexport function defineReactive (data: any, key: string | number, val: any) {\n const dep = new Dep()\n const property = Object.getOwnPropertyDescriptor(data, key)\n if (property && property.configurable === false) {\n return\n }\n const getter = property && property.get\n const setter = property && property.set\n if ((!getter || setter) && arguments.length === 2) {\n val = data[key]\n }\n let childOb = observe(val)\n Object.defineProperty(data, key, {\n get: () => {\n const value = getter ? getter.call(data) : val\n if (Dep.target) {\n dep.addSub(Dep.target)\n if (childOb) {\n childOb.dep.addSub(Dep.target)\n }\n }\n return value\n },\n set: (newVal) => {\n if (newVal === val) return\n val = newVal\n if (getter && !setter) return\n if (setter) {\n setter.call(data, newVal)\n } else {\n val = newVal\n }\n childOb = observe(newVal)\n dep.notify()\n }\n })\n}\n","import Lucky from '../lib/lucky'\nimport Dep from './dep'\nimport { parsePath, traverse } from './utils'\n\nexport interface WatchOptType {\n handler?: () => Function\n immediate?: boolean\n deep?: boolean\n}\n\nlet uid = 0\nexport default class Watcher {\n id: number\n $lucky: Lucky\n expr: string | Function\n cb: Function\n deep: boolean\n getter: Function\n value: any\n\n /**\n * 观察者构造器\n * @param {*} $lucky \n * @param {*} expr \n * @param {*} cb \n */\n constructor ($lucky: Lucky, expr: string | Function, cb: Function, options: WatchOptType = {}) {\n this.id = uid++\n this.$lucky = $lucky\n this.expr = expr\n this.deep = !!options.deep\n if (typeof expr === 'function') {\n this.getter = expr\n } else {\n this.getter = parsePath(expr)\n }\n this.cb = cb\n this.value = this.get()\n }\n\n /**\n * 根据表达式获取新值\n */\n get () {\n Dep.target = this\n const value = this.getter.call(this.$lucky, this.$lucky)\n // 处理深度监听\n if (this.deep) {\n traverse(value)\n }\n Dep.target = null\n return value\n }\n\n /**\n * 触发 watcher 更新\n */\n update () {\n // get获取新值\n const newVal = this.get()\n // 读取之前存储的旧值\n const oldVal = this.value\n this.value = newVal\n // 触发 watch 回调\n this.cb.call(this.$lucky, newVal, oldVal)\n }\n}\n","import '../utils/polyfill'\nimport { has, isExpectType, throttle } from '../utils/index'\nimport { name, version } from '../../package.json'\nimport { ConfigType, UserConfigType, ImgItemType, ImgType, Tuple } from '../types/index'\nimport { defineReactive } from '../observer'\nimport Watcher, { WatchOptType } from '../observer/watcher'\n\nexport default class Lucky {\n static version: string = version\n protected readonly version: string = version\n protected readonly config: ConfigType\n protected readonly ctx: CanvasRenderingContext2D\n protected htmlFontSize: number = 16\n protected rAF: Function = function () {}\n protected boxWidth: number = 0\n protected boxHeight: number = 0\n protected data: {\n width: string | number,\n height: string | number\n }\n\n /**\n * 公共构造器\n * @param config\n */\n constructor (\n config: string | HTMLDivElement | UserConfigType,\n data: {\n width: string | number,\n height: string | number\n }\n ) {\n // 兼容代码开始: 为了处理 v1.0.6 版本在这里传入了一个 dom\n if (typeof config === 'string') config = { el: config } as UserConfigType\n else if (config.nodeType === 1) config = { el: '', divElement: config } as UserConfigType\n // 这里先野蛮的处理, 等待后续优化, 对外暴露的类型是UserConfigType, 但内部期望是ConfigType\n config = config as UserConfigType\n this.config = config as ConfigType\n this.data = data\n // 开始初始化\n if (!config.flag) config.flag = 'WEB'\n if (config.el) config.divElement = document.querySelector(config.el) as HTMLDivElement\n // 如果存在父盒子, 就创建canvas标签\n if (config.divElement) {\n // 无论盒子内有没有canvas都执行覆盖逻辑\n config.canvasElement = document.createElement('canvas')\n config.divElement.appendChild(config.canvasElement)\n }\n // 获取 canvas 上下文\n if (config.canvasElement) {\n config.ctx = config.canvasElement.getContext('2d')!\n // 添加版本信息到标签上, 方便定位版本问题\n config.canvasElement.setAttribute('package', `${name}@${version}`)\n config.canvasElement.addEventListener('click', e => this.handleClick(e))\n }\n this.ctx = config.ctx as CanvasRenderingContext2D\n // 初始化 window 方法\n this.initWindowFunction()\n // 如果最后得不到 canvas 上下文那就无法进行绘制\n if (!this.config.ctx) {\n console.error('无法获取到 CanvasContext2D')\n }\n // 监听 window 触发 resize 时重置\n if (window && typeof window.addEventListener === 'function') {\n window.addEventListener('resize', throttle(() => this.resize(), 300))\n }\n // 监听异步设置 html 的 fontSize 并重新绘制\n if (window && typeof window.MutationObserver === 'function') {\n new window.MutationObserver(() => {\n this.resize()\n }).observe(document.documentElement, { attributes: true })\n }\n }\n\n /**\n * 初始化组件大小/单位\n */\n protected resize(): void {\n this.config.beforeResize?.()\n // 先初始化 fontSize 以防后面有 rem 单位\n this.setHTMLFontSize()\n // 拿到 config 即可设置 dpr\n this.setDpr()\n // 初始化宽高\n this.resetWidthAndHeight()\n // 根据 dpr 来缩放 canvas\n this.zoomCanvas()\n }\n\n /**\n * 初始化方法\n */\n protected initLucky () {\n this.resize()\n if (!this.boxWidth || !this.boxHeight) {\n return console.error('无法获取到宽度或高度')\n }\n }\n\n /**\n * 鼠标点击事件\n * @param e 事件参数\n */\n protected handleClick (e: MouseEvent): void {}\n\n /**\n * 根标签的字体大小\n */\n protected setHTMLFontSize (): void {\n if (!window || !window.getComputedStyle) return\n this.htmlFontSize = +window.getComputedStyle(document.documentElement).fontSize.slice(0, -2)\n }\n\n // 清空画布\n public clearCanvas (): void {\n const [width, height] = [this.boxWidth, this.boxHeight]\n this.ctx.clearRect(-width, -height, width * 2, height * 2)\n }\n\n /**\n * 设备像素比\n * window 环境下自动获取, 其余环境手动传入\n */\n protected setDpr (): void {\n const { config } = this\n if (config.dpr) {\n // 优先使用 config 传入的 dpr\n } else if (window) {\n window['dpr'] = config.dpr = window.devicePixelRatio || 1\n } else if (!config.dpr) {\n console.error(config, '未传入 dpr 可能会导致绘制异常')\n }\n }\n\n /**\n * 重置盒子和canvas的宽高\n */\n private resetWidthAndHeight (): void {\n const { config, data } = this\n // 如果是浏览器环境并且存在盒子\n let boxWidth = 0, boxHeight = 0\n if (config.divElement) {\n boxWidth = config.divElement.offsetWidth\n boxHeight = config.divElement.offsetHeight\n }\n // 先从 data 里取宽高, 如果 config 上面没有, 就从 style 上面取\n this.boxWidth = this.getLength(data.width || config['width']) || boxWidth\n this.boxHeight = this.getLength(data.height || config['height']) || boxHeight\n // 重新把宽高赋给盒子\n if (config.divElement) {\n config.divElement.style.overflow = 'hidden'\n config.divElement.style.width = this.boxWidth + 'px'\n config.divElement.style.height = this.boxHeight + 'px'\n }\n }\n\n /**\n * 根据 dpr 缩放 canvas 并处理位移\n */\n protected zoomCanvas (): void {\n const { config, ctx } = this\n const { canvasElement, dpr } = config\n const [width, height] = [this.boxWidth * dpr, this.boxHeight * dpr]\n if (!canvasElement) return\n canvasElement.width = width\n canvasElement.height = height\n canvasElement.style.width = `${width}px`\n canvasElement.style.height = `${height}px`\n canvasElement.style['transform-origin'] = 'left top'\n canvasElement.style.transform = `scale(${1 / dpr})`\n ctx.scale(dpr, dpr)\n }\n\n /**\n * 从 window 对象上获取一些方法\n */\n private initWindowFunction (): void {\n const { config } = this\n if (window) {\n this.rAF = window.requestAnimationFrame ||\n window['webkitRequestAnimationFrame'] ||\n window['mozRequestAnimationFrame'] ||\n function (callback: Function) {\n window.setTimeout(callback, 1000 / 60)\n }\n config.setTimeout = window.setTimeout\n config.setInterval = window.setInterval\n config.clearTimeout = window.clearTimeout\n config.clearInterval = window.clearInterval\n return\n }\n if (config.rAF) {\n // 优先使用帧动画\n this.rAF = config.rAF\n } else if (config.setTimeout) {\n // 其次使用定时器\n const timeout = config.setTimeout\n this.rAF = (callback: Function): number => timeout(callback, 16.7)\n } else {\n // 如果config里面没有提供, 那就假设全局方法存在setTimeout\n this.rAF = (callback: Function): number => setTimeout(callback, 16.7)\n }\n }\n\n public isWeb () {\n return ['WEB', 'UNI-H5', 'TARO-H5'].includes(this.config.flag)\n }\n\n /**\n * 异步加载图片并返回图片的几何信息\n * @param src 图片路径\n * @param info 图片信息\n */\n protected loadImg (\n src: string,\n info: ImgItemType,\n resolveName = '$resolve'\n ): Promise<ImgType> {\n return new Promise((resolve, reject) => {\n if (!src) reject(`=> '${info.src}' 不能为空或不合法`)\n if (this.config.flag === 'WEB') {\n let imgObj = new Image()\n imgObj['crossorigin'] = 'anonymous'\n imgObj.onload = () => resolve(imgObj)\n imgObj.onerror = () => reject(`=> '${info.src}' 图片加载失败`)\n imgObj.src = src\n } else {\n // 其余平台向外暴露, 交给外部自行处理\n info[resolveName] = resolve\n info['$reject'] = reject\n return\n }\n })\n }\n\n /**\n * 公共绘制图片的方法\n * @param imgObj 图片对象\n * @param rectInfo: [x轴位置, y轴位置, 渲染宽度, 渲染高度] \n */\n protected drawImage(\n ctx: CanvasRenderingContext2D,\n imgObj: ImgType,\n ...rectInfo: [...Tuple<number, 4>, ...Partial<Tuple<number, 4>>]\n ): void {\n let drawImg\n const { flag, dpr } = this.config\n if (['WEB', 'MP-WX'].includes(flag)) {\n // 浏览器和新版小程序中直接绘制即可\n drawImg = imgObj\n } else if (['UNI-H5', 'UNI-MP', 'TARO-H5', 'TARO-MP'].includes(flag)) {\n // 旧版本的小程序需要绘制 path, 这里特殊处理一下\n type OldImageType = ImgType & { path: CanvasImageSource }\n drawImg = (imgObj as OldImageType).path\n } else {\n // 如果传入了未知的标识\n return console.error('意料之外的 flag, 该平台尚未兼容!')\n }\n const miniProgramOffCtx = (drawImg['canvas'] || drawImg).getContext?.('2d')\n if (miniProgramOffCtx && !this.isWeb()) {\n rectInfo = rectInfo.map(val => val! * dpr) as Tuple<number, 8>\n const temp = miniProgramOffCtx.getImageData(...rectInfo.slice(0, 4))\n ctx.putImageData(temp, ...(rectInfo.slice(4, 6) as Tuple<number, 2>))\n } else {\n if (rectInfo.length === 8) {\n rectInfo = rectInfo.map((val, index) => index < 4 ? val! * dpr : val) as Tuple<number, 8>\n }\n // 尝试捕获错误\n try {\n ctx.drawImage(drawImg, ...rectInfo as Tuple<number, 8>)\n } catch (err) {\n /**\n * TODO: safari浏览器下, init() 会出现奇怪的报错\n * IndexSizeError: The index is not in the allowed range\n * 但是这个报错并不影响实际的绘制, 目前先放一放, 等待有缘人\n */\n // console.log(err)\n }\n }\n }\n\n /**\n * 计算图片的渲染宽高\n * @param imgObj 图片标签元素\n * @param imgInfo 图片信息\n * @param maxWidth 最大宽度\n * @param maxHeight 最大高度\n * @return [渲染宽度, 渲染高度]\n */\n protected computedWidthAndHeight (\n imgObj: ImgType,\n imgInfo: ImgItemType,\n maxWidth: number,\n maxHeight: number\n ): [number, number] {\n // 根据配置的样式计算图片的真实宽高\n if (!imgInfo.width && !imgInfo.height) {\n // 如果没有配置宽高, 则使用图片本身的宽高\n return [imgObj.width, imgObj.height]\n } else if (imgInfo.width && !imgInfo.height) {\n // 如果只填写了宽度, 没填写高度\n let trueWidth = this.getLength(imgInfo.width, maxWidth)\n // 那高度就随着宽度进行等比缩放\n return [trueWidth, imgObj.height * (trueWidth / imgObj.width)]\n } else if (!imgInfo.width && imgInfo.height) {\n // 如果只填写了宽度, 没填写高度\n let trueHeight = this.getLength(imgInfo.height, maxHeight)\n // 那宽度就随着高度进行等比缩放\n return [imgObj.width * (trueHeight / imgObj.height), trueHeight]\n }\n // 如果宽度和高度都填写了, 就如实计算\n return [\n this.getLength(imgInfo.width, maxWidth),\n this.getLength(imgInfo.height, maxHeight)\n ]\n }\n\n /**\n * 转换单位\n * @param { string } value 将要转换的值\n * @param { number } denominator 分子\n * @return { number } 返回新的字符串\n */\n protected changeUnits (value: string, denominator = 1): number {\n const { config } = this\n return Number(value.replace(/^([-]*[0-9.]*)([a-z%]*)$/, (val, num, unit) => {\n const handleCssUnit = {\n '%': (n: number) => n * (denominator / 100),\n 'px': (n: number) => n * 1,\n 'rem': (n: number) => n * this.htmlFontSize,\n 'vw': (n: number) => n / 100 * window.innerWidth,\n }[unit]\n if (handleCssUnit) return handleCssUnit(num)\n // 如果找不到默认单位, 就交给外面处理\n const otherHandleCssUnit = config.handleCssUnit || config['unitFunc']\n return otherHandleCssUnit ? otherHandleCssUnit(num, unit) : num\n }))\n }\n\n /**\n * 获取长度\n * @param length 将要转换的长度\n * @param maxLength 最大长度\n * @return 返回长度\n */\n protected getLength (length: string | number | undefined, maxLength?: number): number {\n if (isExpectType(length, 'number')) return length as number\n if (isExpectType(length, 'string')) return this.changeUnits(length as string, maxLength)\n return 0\n }\n\n /**\n * 获取相对(居中)X坐标\n * @param width\n * @param col\n */\n protected getOffsetX (width: number, maxWidth: number = 0): number {\n return (maxWidth - width) / 2\n }\n\n protected getOffscreenCanvas (width: number, height: number): {\n _offscreenCanvas: HTMLCanvasElement,\n _ctx: CanvasRenderingContext2D\n } | void {\n if (!this['_offscreenCanvas']) {\n if (window && window.document && this.config.flag === 'WEB') {\n this['_offscreenCanvas'] = document.createElement('canvas')\n } else {\n this['_offscreenCanvas'] = this.config['offscreenCanvas']\n }\n if (!this['_offscreenCanvas']) return console.error('离屏 Canvas 无法渲染!')\n }\n const dpr = this.config.dpr\n const _offscreenCanvas = this['_offscreenCanvas'] as HTMLCanvasElement\n _offscreenCanvas.width = (width || 300) * dpr\n _offscreenCanvas.height = (height || 150) * dpr\n const _ctx = _offscreenCanvas.getContext('2d')!\n _ctx.clearRect(0, 0, width, height)\n _ctx.scale(dpr, dpr)\n _ctx['dpr'] = dpr\n return { _offscreenCanvas, _ctx }\n }\n\n /**\n * 添加一个新的响应式数据 (临时)\n * @param data 数据\n * @param key 属性\n * @param value 新值\n */\n public $set (data: object, key: string | number, value: any) {\n if (!data || typeof data !== 'object') return\n defineReactive(data, key, value)\n }\n\n /**\n * 添加一个属性计算 (临时)\n * @param data 源数据\n * @param key 属性名\n * @param callback 回调函数\n */\n protected $computed (data: object, key: string, callback: Function) {\n Object.defineProperty(data, key, {\n get: () => {\n return callback.call(this)\n }\n })\n }\n\n /**\n * 添加一个观察者 create user watcher\n * @param expr 表达式\n * @param handler 回调函数\n * @param watchOpt 配置参数\n * @return 卸载当前观察者的函数 (暂未返回)\n */\n protected $watch (\n expr: string | Function,\n handler: Function | WatchOptType,\n watchOpt: WatchOptType = {}\n ): Function {\n if (typeof handler === 'object') {\n watchOpt = handler\n handler = watchOpt.handler!\n }\n // 创建 user watcher\n const watcher = new Watcher(this, expr, handler, watchOpt)\n // 判断是否需要初始化时触发回调\n if (watchOpt.immediate) {\n handler.call(this, watcher.value)\n }\n // 返回一个卸载当前观察者的函数\n return function unWatchFn () {}\n }\n}\n","/**\n * 转换为运算角度\n * @param { number } deg 数学角度\n * @return { number } 运算角度\n */\nexport const getAngle = (deg: number): number => {\n return Math.PI / 180 * deg\n}\n\n/**\n * 根据角度计算圆上的点\n * @param { number } deg 运算角度\n * @param { number } r 半径\n * @return { Array<number> } 坐标[x, y]\n */\nexport const getArcPointerByDeg = (deg: number, r: number): [number, number] => {\n return [+(Math.cos(deg) * r).toFixed(8), +(Math.sin(deg) * r).toFixed(8)]\n}\n\n/**\n * 根据点计算切线方程\n * @param { number } x 横坐标\n * @param { number } y 纵坐标\n * @return { Array<number> } [斜率, 常数]\n */\nexport const getTangentByPointer = (x: number, y: number): Array<number> => {\n let k = - x / y\n let b = -k * x + y\n return [k, b]\n}\n\n// 使用 arc 绘制扇形\nexport const fanShapedByArc = (\n ctx: CanvasRenderingContext2D,\n minRadius: number,\n maxRadius: number,\n start: number,\n end: number,\n gutter: number,\n): void => {\n ctx.beginPath()\n let maxGutter = getAngle(90 / Math.PI / maxRadius * gutter)\n let minGutter = getAngle(90 / Math.PI / minRadius * gutter)\n let maxStart = start + maxGutter\n let maxEnd = end - maxGutter\n let minStart = start + minGutter\n let minEnd = end - minGutter\n ctx.arc(0, 0, maxRadius, maxStart, maxEnd, false)\n // 如果 getter 比按钮短就绘制圆弧, 反之计算新的坐标点\n // if (minEnd > minStart) {\n // ctx.arc(0, 0, minRadius, minEnd, minStart, true)\n // } else {\n ctx.lineTo(\n ...getArcPointerByDeg(\n (start + end) / 2,\n gutter / 2 / Math.abs(Math.sin((start - end) / 2))\n )\n )\n // }\n ctx.closePath()\n}\n\n// 使用 arc 绘制圆角矩形\nexport const roundRectByArc = (\n ctx: CanvasRenderingContext2D,\n ...[x, y, w, h, r]: number[]\n) => {\n const min = Math.min(w, h), PI = Math.PI\n if (r > min / 2) r = min / 2\n ctx.beginPath()\n ctx.moveTo(x + r, y)\n ctx.lineTo(x + r, y)\n ctx.lineTo(x + w - r, y)\n ctx.arc(x + w - r, y + r, r, -PI / 2, 0)\n ctx.lineTo(x + w, y + h - r)\n ctx.arc(x + w - r, y + h - r, r, 0, PI / 2)\n ctx.lineTo(x + r, y + h)\n ctx.arc(x + r, y + h - r, r, PI / 2, PI)\n ctx.lineTo(x, y + r)\n ctx.arc(x + r, y + r, r, PI, -PI / 2)\n ctx.closePath()\n}\n\n/**\n * 创建线性渐变色\n */\nexport const getLinearGradient = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number,\n background: string\n) => {\n const context = (/linear-gradient\\((.+)\\)/.exec(background) as Array<any>)[1]\n .split(',') // 根据逗号分割\n .map((text: string) => text.trim()) // 去除两边空格\n let deg = context.shift(), direction: [number, number, number, number] = [0, 0, 0, 0]\n // 通过起始点和角度计算渐变终点的坐标点, 这里感谢泽宇大神提醒我使用勾股定理....\n if (deg.includes('deg')) {\n deg = deg.slice(0, -3) % 360\n // 根据4个象限定义起点坐标, 根据45度划分8个区域计算终点坐标\n const getLenOfTanDeg = (deg: number) => Math.tan(deg / 180 * Math.PI)\n if (deg >= 0 && deg < 45) direction = [x, y + h, x + w, y + h - w * getLenOfTanDeg(deg - 0)]\n else if (deg >= 45 && deg < 90) direction = [x, y + h, (x + w) - h * getLenOfTanDeg(deg - 45), y]\n else if (deg >= 90 && deg < 135) direction = [x + w, y + h, (x + w) - h * getLenOfTanDeg(deg - 90), y]\n else if (deg >= 135 && deg < 180) direction = [x + w, y + h, x, y + w * getLenOfTanDeg(deg - 135)]\n else if (deg >= 180 && deg < 225) direction = [x + w, y, x, y + w * getLenOfTanDeg(deg - 180)]\n else if (deg >= 225 && deg < 270) direction = [x + w, y, x + h * getLenOfTanDeg(deg - 225), y + h]\n else if (deg >= 270 && deg < 315) direction = [x, y, x + h * getLenOfTanDeg(deg - 270), y + h]\n else if (deg >= 315 && deg < 360) direction = [x, y, x + w, y + h - w * getLenOfTanDeg(deg - 315)]\n }\n // 创建四个简单的方向坐标\n else if (deg.includes('top')) direction = [x, y + h, x, y]\n else if (deg.includes('bottom')) direction = [x, y, x, y + h]\n else if (deg.includes('left')) direction = [x + w, y, x, y]\n else if (deg.includes('right')) direction = [x, y, x + w, y]\n // 创建线性渐变必须使用整数坐标\n const gradient = ctx.createLinearGradient(...(direction.map(n => n >> 0) as typeof direction))\n // 这里后期重构, 先用any代替\n return context.reduce((gradient: any, item: any, index: any) => {\n const info = item.split(' ')\n if (info.length === 1) gradient.addColorStop(index, info[0])\n else if (info.length === 2) gradient.addColorStop(...info)\n return gradient\n }, gradient)\n}\n\n// // 根据三点画圆弧\n// export const drawRadian = (\n// ctx: CanvasRenderingContext2D,\n// r: number,\n// start: number,\n// end: number,\n// direction: boolean = true\n// ) => {\n// // 如果角度大于等于180度, 则分两次绘制, 因为 arcTo 无法绘制180度的圆弧\n// if (Math.abs(end - start).toFixed(8) >= getAngle(180).toFixed(8)) {\n// let middle = (end + start) / 2\n// if (direction) {\n// drawRadian(ctx, r, start, middle, direction)\n// drawRadian(ctx, r, middle, end, direction)\n// } else {\n// drawRadian(ctx, r, middle, end, direction)\n// drawRadian(ctx, r, start, middle, direction)\n// }\n// return false\n// }\n// // 如果方法相反, 则交换起点和终点\n// if (!direction) [start, end] = [end, start]\n// const [x1, y1] = getArcPointerByDeg(start, r)\n// const [x2, y2] = getArcPointerByDeg(end, r)\n// const [k1, b1] = getTangentByPointer(x1, y1)\n// const [k2, b2] = getTangentByPointer(x2, y2)\n// // 计算两条切线的交点\n// let x0 = (b2 - b1) / (k1 - k2)\n// let y0 = (k2 * b1 - k1 * b2) / (k2 - k1)\n// // 如果有任何一条切线垂直于x轴, 则斜率不存在\n// if (isNaN(x0)) {\n// Math.abs(x1) === +r.toFixed(8) && (x0 = x1)\n// Math.abs(x2) === +r.toFixed(8) && (x0 = x2)\n// }\n// if (k1 === Infinity || k1 === -Infinity) {\n// y0 = k2 * x0 + b2\n// }\n// else if (k2 === Infinity || k2 === -Infinity) {\n// y0 = k1 * x0 + b1\n// }\n// ctx.lineTo(x1, y1)\n// // 微信小程序下 arcTo 在安卓真机下绘制有 bug\n// ctx.arcTo(x0, y0, x2, y2, r)\n// }\n\n// // 使用 arcTo 绘制扇形 (弃用)\n// export const drawSectorByArcTo = (\n// ctx: CanvasRenderingContext2D,\n// minRadius: number,\n// maxRadius: number,\n// start: number,\n// end: number,\n// gutter: number,\n// ) => {\n// if (!minRadius) minRadius = gutter\n// // 内外圆弧分别进行等边缩放\n// let maxGutter = getAngle(90 / Math.PI / maxRadius * gutter)\n// let minGutter = getAngle(90 / Math.PI / minRadius * gutter)\n// let maxStart = start + maxGutter\n// let maxEnd = end - maxGutter\n// let minStart = start + minGutter\n// let minEnd = end - minGutter\n// ctx.beginPath()\n// ctx.moveTo(...getArcPointerByDeg(maxStart, maxRadius))\n// drawRadian(ctx, maxRadius, maxStart, maxEnd, true)\n// // 如果 getter 比按钮短就绘制圆弧, 反之计算新的坐标点\n// if (minEnd > minStart) {\n// drawRadian(ctx, minRadius, minStart, minEnd, false)\n// } else {\n// ctx.lineTo(\n// ...getArcPointerByDeg(\n// (start + end) / 2,\n// gutter / 2 / Math.abs(Math.sin((start - end) / 2))\n// )\n// )\n// }\n// ctx.closePath()\n// }\n\n// // 使用 arcTo 绘制圆角矩形 (弃用)\n// export const roundRectByArcTo = (\n// ctx: CanvasRenderingContext2D,\n// ...[x, y, w, h, r]: number[]\n// ) => {\n// let min = Math.min(w, h)\n// if (r > min / 2) r = min / 2\n// ctx.beginPath()\n// ctx.moveTo(x + r, y)\n// ctx.lineTo(x + r, y)\n// ctx.lineTo(x + w - r, y)\n// ctx.arcTo(x + w, y, x + w, y + r, r)\n// ctx.lineTo(x + w, y + h - r)\n// ctx.arcTo(x + w, y + h, x + w - r, y + h, r)\n// ctx.lineTo(x + r, y + h)\n// ctx.arcTo(x, y + h, x, y + h - r, r)\n// ctx.lineTo(x, y + r)\n// ctx.arcTo(x, y, x + r, y, r)\n// }\n","/**\n * 缓动函数\n * t: current time(当前时间)\n * b: beginning value(初始值)\n * c: change in value(变化量)\n * d: duration(持续时间)\n * \n * 感谢张鑫旭大佬 https://github.com/zhangxinxu/Tween\n */\n\ninterface SpeedType {\n easeIn: (...arr: number[]) => number\n easeOut: (...arr: number[]) => number\n}\n\n// 二次方的缓动\nexport const quad: SpeedType = {\n easeIn: function (t, b, c, d) {\n if (t >= d) t = d\n return c * (t /= d) * t + b\n },\n easeOut: function (t, b, c, d) {\n if (t >= d) t = d\n return -c * (t /= d) * (t - 2) + b\n }\n}\n\n// 三次方的缓动\nexport const cubic: SpeedType = {\n easeIn: function (t, b, c, d) {\n if (t >= d) t = d\n return c * (t /= d) * t * t + b\n },\n easeOut: function (t, b, c, d) {\n if (t >= d) t = d\n return c * ((t = t / d - 1) * t * t + 1) + b\n }\n}\n\n// 四次方的缓动\nexport const quart: SpeedType = {\n easeIn: function (t, b, c, d) {\n if (t >= d) t = d\n return c * (t /= d) * t * t * t + b\n },\n easeOut: function (t, b, c, d) {\n if (t >= d) t = d\n return -c * ((t = t / d - 1) * t * t * t - 1) + b\n }\n}\n\n// 五次方的缓动\nexport const quint: SpeedType = {\n easeIn: function (t, b, c, d) {\n if (t >= d) t = d\n return c * (t /= d) * t * t * t * t + b\n },\n easeOut: function (t, b, c, d) {\n if (t >= d) t = d\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b\n }\n}\n\n// 正弦曲线的缓动\nexport const sine: SpeedType = {\n easeIn: function (t, b, c, d) {\n if (t >= d) t = d\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b\n },\n easeOut: function (t, b, c, d) {\n if (t >= d) t = d\n return c * Math.sin(t / d * (Math.PI / 2)) + b\n }\n}\n\n// 指数曲线的缓动\nexport const expo: SpeedType = {\n easeIn: function (t, b, c, d) {\n if (t >= d) t = d\n return (t == 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b\n },\n easeOut: function (t, b, c, d) {\n if (t >= d) t = d\n return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b\n }\n}\n\n// 圆形曲线的缓动\nexport const circ: SpeedType = {\n easeIn: function (t, b, c, d) {\n if (t >= d) t = d\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b\n },\n easeOut: function (t, b, c, d) {\n if (t >= d) t = d\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b\n }\n}\n","import Lucky from './lucky'\nimport { UserConfigType, FontItemType, ImgType } from '../types/index'\nimport LuckyWheelConfig, {\n BlockType,\n PrizeType,\n ButtonType,\n DefaultConfigType,\n DefaultStyleType,\n StartCallbackType,\n EndCallbackType\n} from '../types/wheel'\nimport {\n removeEnter,\n hasBackground,\n computeRange,\n splitText,\n has,\n} from '../utils/index'\nimport { getAngle, fanShapedByArc } from '../utils/math'\nimport { quad } from '../utils/tween'\n\nexport default class LuckyWheel extends Lucky {\n private blocks: Array<BlockType> = []\n private prizes: Array<PrizeType> = []\n private buttons: Array<ButtonType> = []\n private defaultConfig: DefaultConfigType = {}\n private defaultStyle: DefaultStyleType = {}\n private _defaultConfig: Required<DefaultConfigType> = {} as Required<DefaultConfigType>\n private _defaultStyle: Required<DefaultStyleType> = {} as Required<DefaultStyleType>\n private startCallback?: StartCallbackType\n private endCallback?: EndCallbackType\n private Radius = 0 // 大转盘半径\n private prizeRadius = 0 // 奖品区域半径\n private prizeDeg = 0 // 奖品数学角度\n private prizeAng = 0 // 奖品运算角度\n private rotateDeg = 0 // 转盘旋转角度\n private maxBtnRadius = 0 // 最大按钮半径\n private startTime = 0 // 开始时间戳\n private endTime = 0 // 停止时间戳\n private stopDeg = 0 // 刻舟求剑\n private endDeg = 0 // 停止角度\n private FPS = 16.6 // 屏幕刷新率\n /**\n * 游戏当前的阶段\n * step = 0 时, 游戏尚未开始\n * step = 1 时, 此时处于加速阶段\n * step = 2 时, 此时处于匀速阶段\n * step = 3 时, 此时处于减速阶段\n */\n private step: 0 | 1 | 2 | 3 = 0\n /**\n * 中奖索引\n * prizeFlag = undefined 时, 处于开始抽奖阶段, 正常旋转\n * prizeFlag >= 0 时, 说明stop方法被调用, 并且传入了中奖索引\n * prizeFlag === -1 时, 说明stop方法被调用, 并且传入了负值, 本次抽奖无效\n */\n private prizeFlag: number | undefined\n private ImageCache = new Map()\n\n /**\n * 大转盘构造器\n * @param config 配置项\n * @param data 抽奖数据\n */\n constructor (config: UserConfigType, data: LuckyWheelConfig) {\n super(config, {\n width: data.width,\n height: data.height\n })\n this.initData(data)\n this.initWatch()\n this.initComputed()\n // 创建前回调函数\n config.beforeCreate?.call(this)\n // 首次初始化\n this.init()\n }\n\n protected resize(): void {\n super.resize()\n this.Radius = Math.min(this.boxWidth, this.boxHeight) / 2\n this.ctx.translate(this.Radius, this.Radius)\n this.draw()\n this.config.afterResize?.()\n }\n\n protected initLucky (): void {\n this.Radius = 0\n this.prizeRadius = 0\n this.prizeDeg = 0\n this.prizeAng = 0\n this.rotateDeg = 0\n this.maxBtnRadius = 0\n this.startTime = 0\n this.endTime = 0\n this.stopDeg = 0\n this.endDeg = 0\n this.FPS = 16.6\n this.prizeFlag = -1\n this.step = 0\n super.initLucky()\n }\n\n /**\n * 初始化数据\n * @param data\n */\n private initData (data: LuckyWheelConfig): void {\n this.$set(this, 'width', data.width)\n this.$set(this, 'height', data.height)\n this.$set(this, 'blocks', data.blocks || [])\n this.$set(this, 'prizes', data.prizes || [])\n this.$set(this, 'buttons', data.buttons || [])\n this.$set(this, 'defaultConfig', data.defaultConfig || {})\n this.$set(this, 'defaultStyle', data.defaultStyle || {})\n this.$set(this, 'startCallback', data.start)\n this.$set(this, 'endCallback', data.end)\n }\n\n /**\n * 初始化属性计算\n */\n private initComputed () {\n // 默认配置\n this.$computed(this, '_defaultConfig', () => {\n const config = {\n gutter: '0px',\n offsetDegree: 0,\n speed: 20,\n speedFunction: 'quad',\n accelerationTime: 2500,\n decelerationTime: 2500,\n stopRange: 0,\n ...this.defaultConfig\n }\n return config\n })\n // 默认样式\n this.$computed(this, '_defaultStyle', () => {\n const style = {\n fontSize: '18px',\n fontColor: '#000',\n fontStyle: 'sans-serif',\n fontWeight: '400',\n background: 'rgba(0,0,0,0)',\n wordWrap: true,\n lengthLimit: '90%',\n ...this.defaultStyle\n }\n return style\n })\n }\n\n /**\n * 初始化观察者\n */\n private initWatch () {\n // 重置宽度\n this.$watch('width', (newVal: string | number) => {\n this.data.width = newVal\n this.resize()\n })\n // 重置高度\n this.$watch('height', (newVal: string | number) => {\n this.data.height = newVal\n this.resize()\n })\n // 观察 blocks 变化收集图片\n this.$watch('blocks', (newData: Array<BlockType>) => {\n this.initImageCache()\n }, { deep: true })\n // 观察 prizes 变化收集图片\n this.$watch('prizes', (newData: Array<PrizeType>) => {\n this.initImageCache()\n }, { deep: true })\n // 观察 buttons 变化收集图片\n this.$watch('buttons', (newData: Array<ButtonType>) => {\n this.initImageCache()\n }, { deep: true })\n this.$watch('defaultConfig', () => this.draw(), { deep: true })\n this.$watch('defaultStyle', () => this.draw(), { deep: true })\n this.$watch('startCallback', () => this.init())\n this.$watch('endCallback', () => this.init())\n }\n\n /**\n * 初始化 canvas 抽奖\n */\n public async init (): Promise<void> {\n this.initLucky()\n const { config } = this\n // 初始化前回调函数\n config.beforeInit?.call(this)\n this.draw() // 先画一次, 防止闪烁\n this.draw() // 再画一次, 拿到正确的按钮轮廓\n // 异步加载图片\n await this.initImageCache()\n // 初始化后回调函数\n config.afterInit?.call(this)\n }\n\n private initImageCache (): Promise<void> {\n return new Promise((resolve) => {\n const willUpdateImgs = {\n blocks: this.blocks.map(block => block.imgs),\n prizes: this.prizes.map(prize => prize.imgs),\n buttons: this.buttons.map(btn => btn.imgs),\n }\n ;(<(keyof typeof willUpdateImgs)[]>Object.keys(willUpdateImgs)).forEach(imgName => {\n const willUpdate = willUpdateImgs[imgName]\n // 循环遍历所有图片\n const allPromise: Promise<void>[] = []\n willUpdate && willUpdate.forEach((imgs, cellIndex) => {\n imgs && imgs.forEach((imgInfo, imgIndex) => {\n allPromise.push(this.loadAndCacheImg(imgName, cellIndex, imgIndex))\n })\n })\n Promise.all(allPromise).then(() => {\n this.draw()\n resolve()\n })\n })\n })\n }\n\n /**\n * canvas点击事件\n * @param e 事件参数\n */\n protected handleClick (e: MouseEvent): void {\n const { ctx } = this\n ctx.beginPath()\n ctx.arc(0, 0, this.maxBtnRadius, 0, Math.PI * 2, false)\n if (!ctx.isPointInPath(e.offsetX, e.offsetY)) return\n if (this.step !== 0) return\n this.startCallback?.(e)\n }\n\n /**\n * 根据索引单独加载指定图片并缓存\n * @param cellName 模块名称\n * @param cellIndex 模块索引\n * @param imgName 模块对应的图片缓存\n * @param imgIndex 图片索引\n */\n private async loadAndCacheImg (\n cellName: 'blocks' | 'prizes' | 'buttons',\n cellIndex: number,\n imgIndex: number,\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n // 获取图片信息\n const cell: BlockType | PrizeType | ButtonType = this[cellName][cellIndex]\n if (!cell || !cell.imgs) return\n const imgInfo = cell.imgs[imgIndex]\n if (!imgInfo) return\n // 异步加载图片\n this.loadImg(imgInfo.src, imgInfo).then(async currImg => {\n if (typeof imgInfo.formatter === 'function') {\n currImg = await Promise.resolve(imgInfo.formatter.call(this, currImg))\n }\n this.ImageCache.set(imgInfo['src'], currImg)\n resolve()\n }).catch(err => {\n console.error(`${cellName}[${cellIndex}].imgs[${imgIndex}] ${err}`)\n reject()\n })\n })\n }\n\n private drawBlock (radius: number, block: BlockType, blockIndex: number): void {\n const { ctx } = this\n if (hasBackground(block.background)) {\n ctx.beginPath()\n ctx.fillStyle = block.background!\n ctx.arc(0, 0, radius, 0, Math.PI * 2, false)\n ctx.fill()\n }\n block.imgs && block.imgs.forEach((imgInfo, imgIndex) => {\n const blockImg = this.ImageCache.get(imgInfo.src)\n if (!blockImg) return\n // 绘制图片\n const [trueWidth, trueHeight] = this.computedWidthAndHeight(blockImg, imgInfo, radius * 2, radius * 2)\n const [xAxis, yAxis] = [this.getOffsetX(trueWidth) + this.getLength(imgInfo.left, radius * 2), this.getLength(imgInfo.top, radius * 2) - radius]\n ctx.save()\n imgInfo.rotate && ctx.rotate(getAngle(this.rotateDeg))\n this.drawImage(ctx, blockImg, xAxis, yAxis, trueWidth, trueHeight)\n ctx.restore()\n })\n }\n\n /**\n * 开始绘制\n */\n protected draw (): void {\n const { config, ctx, _defaultConfig, _defaultStyle } = this\n // 触发绘制前回调\n config.beforeDraw?.call(this, ctx)\n // 清空画布\n ctx.clearRect(-this.Radius, -this.Radius, this.Radius * 2, this.Radius * 2)\n // 计算 padding 并绘制 blocks 边框\n this.prizeRadius = this.blocks.reduce((radius, block, blockIndex) => {\n this.drawBlock(radius, block, blockIndex)\n return radius - this.getLength(block.padding && block.padding.split(' ')[0])\n }, this.Radius)\n // 计算起始弧度\n this.prizeDeg = 360 / this.prizes.length\n this.prizeAng = getAngle(this.prizeDeg)\n const shortSide = this.prizeRadius * Math.sin(this.prizeAng / 2) * 2\n // 起始角度调整到正上方, 并且减去半个扇形角度\n let start = getAngle(this.rotateDeg - 90 + this.prizeDeg / 2 + _defaultConfig.offsetDegree)\n // 计算文字横坐标\n const getFontX = (font: FontItemType, line: string) => {\n return this.getOffsetX(ctx.measureText(line).width) + this.getLength(font.left, shortSide)\n }\n // 计算文字纵坐标\n const getFontY = (font: FontItemType, height: number, lineIndex: number) => {\n // 优先使用字体行高, 要么使用默认行高, 其次使用字体大小, 否则使用默认字体大小\n const lineHeight = font.lineHeight || _defaultStyle.lineHeight || font.fontSize || _defaultStyle.fontSize\n return this.getLength(font.top, height) + (lineIndex + 1) * this.getLength(lineHeight)\n }\n ctx.save()\n // 绘制prizes奖品区域\n this.prizes.forEach((prize, prizeIndex) => {\n // 计算当前奖品区域中间坐标点\n let currMiddleDeg = start + prizeIndex * this.prizeAng\n // 奖品区域可见高度\n let prizeHeight = this.prizeRadius - this.maxBtnRadius\n // 绘制背景\n const background = prize.background || _defaultStyle.background\n if (hasBackground(background)) {\n ctx.fillStyle = background\n fanShapedByArc(\n ctx, this.maxBtnRadius, this.prizeRadius,\n currMiddleDeg - this.prizeAng / 2,\n currMiddleDeg + this.prizeAng / 2,\n this.getLength(_defaultConfig.gutter),\n )\n ctx.fill()\n }\n // 计算临时坐标并旋转文字\n let x = Math.cos(currMiddleDeg) * this.prizeRadius\n let y = Math.sin(currMiddleDeg) * this.prizeRadius\n ctx.translate(x, y)\n ctx.rotate(currMiddleDeg + getAngle(90))\n // 绘制图片\n prize.imgs && prize.imgs.forEach((imgInfo, imgIndex) => {\n const prizeImg = this.ImageCache.get(imgInfo.src)\n if (!prizeImg) return\n const [trueWidth, trueHeight] = this.computedWidthAndHeight(\n prizeImg,\n imgInfo,\n this.prizeAng * this.prizeRadius,\n prizeHeight\n )\n const [xAxis, yAxis] = [\n this.getOffsetX(trueWidth) + this.getLength(imgInfo.left, shortSide),\n this.getLength(imgInfo.top, prizeHeight)\n ]\n this.drawImage(ctx, prizeImg, xAxis, yAxis, trueWidth, trueHeight)\n })\n // 逐行绘制文字\n prize.fonts && prize.fonts.forEach(font => {\n const fontColor = font.fontColor || _defaultStyle.fontColor\n const fontWeight = font.fontWeight || _defaultStyle.fontWeight\n const fontSize = this.getLength(font.fontSize || _defaultStyle.fontSize)\n const fontStyle = font.fontStyle || _defaultStyle.fontStyle\n const wordWrap = has(font, 'wordWrap') ? font.wordWrap : _defaultStyle.wordWrap\n const lengthLimit = font.lengthLimit || _defaultStyle.lengthLimit\n const lineClamp = font.lineClamp || _defaultStyle.lineClamp\n ctx.fillStyle = fontColor\n ctx.font = `${fontWeight} ${fontSize >> 0}px ${fontStyle}`\n let lines = [], text = String(font.text)\n if (wordWrap) {\n lines = splitText(ctx, removeEnter(text), (lines) => {\n // 三角形临边\n const adjacentSide = this.prizeRadius - getFontY(font, prizeHeight, lines.length)\n // 三角形短边\n const shortSide = adjacentSide * Math.tan(this.prizeAng / 2)\n // 最大宽度\n let maxWidth = shortSide * 2 - this.getLength(_defaultConfig.gutter)\n return this.getLength(lengthLimit, maxWidth)\n }, lineClamp)\n } else {\n lines = text.split('\\n')\n }\n lines.filter(line => !!line).forEach((line, lineIndex) => {\n ctx.fillText(line, getFontX(font, line), getFontY(font, prizeHeight, lineIndex))\n })\n })\n // 修正旋转角度和原点坐标\n ctx.rotate(getAngle(360) - currMiddleDeg - getAngle(90))\n ctx.translate(-x, -y)\n })\n ctx.restore()\n // 绘制按钮\n this.buttons.forEach((btn, btnIndex) => {\n let radius = this.getLength(btn.radius, this.prizeRadius)\n // 绘制背景颜色\n this.maxBtnRadius = Math.max(this.maxBtnRadius, radius)\n if (hasBackground(btn.background)) {\n ctx.beginPath()\n ctx.fillStyle = btn.background as string\n ctx.arc(0, 0, radius, 0, Math.PI * 2, false)\n ctx.fill()\n }\n // 绘制指针\n if (btn.pointer && hasBackground(btn.background)) {\n ctx.beginPath()\n ctx.fillStyle = btn.background as string\n ctx.moveTo(-radius, 0)\n ctx.lineTo(radius, 0)\n ctx.lineTo(0, -radius * 2)\n ctx.closePath()\n ctx.fill()\n }\n // 绘制按钮图片\n btn.imgs && btn.imgs.forEach((imgInfo, imgIndex) => {\n const btnImg = this.ImageCache.get(imgInfo.src)\n if (!btnImg) return\n const [trueWidth, trueHeight] = this.computedWidthAndHeight(btnImg, imgInfo, radius * 2, radius * 2)\n const [xAxis, yAxis] = [this.getOffsetX(trueWidth) + this.getLength(imgInfo.left, radius), this.getLength(imgInfo.top, radius)]\n this.drawImage(ctx, btnImg, xAxis, yAxis, trueWidth, trueHeight)\n })\n // 绘制按钮文字\n btn.fonts && btn.fonts.forEach(font => {\n let fontColor = font.fontColor || _defaultStyle.fontColor\n let fontWeight = font.fontWeight || _defaultStyle.fontWeight\n let fontSize = this.getLength(font.fontSize || _defaultStyle.fontSize)\n let fontStyle = font.fontStyle || _defaultStyle.fontStyle\n ctx.fillStyle = fontColor\n ctx.font = `${fontWeight} ${fontSize >> 0}px ${fontStyle}`\n String(font.text).split('\\n').forEach((line, lineIndex) => {\n ctx.fillText(line, getFontX(font, line), getFontY(font, radius, lineIndex))\n })\n })\n })\n // 触发绘制后回调\n config.afterDraw?.call(this, ctx)\n }\n\n /**\n * 刻舟求剑\n */\n private carveOnGunwaleOfAMovingBoat (): void {\n const { _defaultConfig, prizeFlag, prizeDeg, rotateDeg } = this\n this.endTime = Date.now()\n const stopDeg = this.stopDeg = rotateDeg\n const speed = _defaultConfig.speed\n const stopRange = (Math.random() * prizeDeg - prizeDeg / 2) * this.getLength(_defaultConfig.stopRange)\n let i = 0, prevSpeed = 0, prevDeg = 0\n while (++i) {\n const endDeg = 360 * i - prizeFlag! * prizeDeg - rotateDeg - _defaultConfig.offsetDegree + stopRange - prizeDeg / 2\n let currSpeed = quad.easeOut(this.FPS, stopDeg, endDeg, _defaultConfig.decelerationTime) - stopDeg\n if (currSpeed > speed) {\n this.endDeg = (speed - prevSpeed > currSpeed - speed) ? endDeg : prevDeg\n break\n }\n prevDeg = endDeg\n prevSpeed = currSpeed\n }\n }\n\n /**\n * 对外暴露: 开始抽奖方法\n */\n public play (): void {\n if (this.step !== 0) return\n // 记录游戏开始时间\n this.startTime = Date.now()\n // 重置中奖索引\n this.prizeFlag = void 0\n // 加速阶段\n this.step = 1\n // 触发回调\n this.config.afterStart?.()\n // 开始游戏\n this.run()\n }\n\n /**\n * 对外暴露: 缓慢停止方法\n * @param index 中奖索引\n */\n public stop (index?: number): void {\n if (this.step === 0 || this.step === 3) return\n // 如果没有传递中奖索引, 则通过range属性计算一个\n if (!index && index !== 0) {\n const rangeArr = this.prizes.map(item => item.range)\n index = computeRange(rangeArr)\n }\n // 如果index是负数则停止游戏, 反之则传递中奖索引\n if (index < 0) {\n this.step = 0\n this.prizeFlag = -1\n } else {\n this.step = 2\n this.prizeFlag = index % this.prizes.length\n }\n }\n\n /**\n * 实际开始执行方法\n * @param num 记录帧动画执行多少次\n */\n private run (num: number = 0): void {\n const { rAF, step, prizeFlag, _defaultConfig } = this\n const { accelerationTime, decelerationTime, speed } = _defaultConfig\n // 游戏结束\n if (step === 0) {\n this.endCallback?.(this.prizes.find((prize, index) => index === prizeFlag) || {})\n return\n }\n // 如果等于 -1 就直接停止游戏\n if (prizeFlag === -1) return\n // 计算结束位置\n if (step === 3 && !this.endDeg) this.carveOnGunwaleOfAMovingBoat()\n // 计算时间间隔\n const startInterval = Date.now() - this.startTime\n const endInterval = Date.now() - this.endTime\n let rotateDeg = this.rotateDeg\n // \n if (step === 1 || startInterval < accelerationTime) { // 加速阶段\n // 记录帧率\n this.FPS = startInterval / num\n const currSpeed = quad.easeIn(startInterval, 0, speed, accelerationTime)\n // 加速到峰值后, 进入匀速阶段\n if (currSpeed === speed) {\n this.step = 2\n }\n rotateDeg = rotateDeg + currSpeed % 360\n } else if (step === 2) { // 匀速阶段\n // 速度保持不变\n rotateDeg = rotateDeg + speed % 360\n // 如果 prizeFlag 有值, 则进入减速阶段\n if (prizeFlag !== void 0 && prizeFlag >= 0) {\n this.step = 3\n // 清空上一次的位置信息\n this.stopDeg = 0\n this.endDeg = 0\n }\n } else if (step === 3) { // 减速阶段\n // 开始缓慢停止\n rotateDeg = quad.easeOut(endInterval, this.stopDeg, this.endDeg, decelerationTime)\n if (endInterval >= decelerationTime) {\n this.step = 0\n }\n } else {\n // 出现异常\n this.stop(-1)\n }\n this.rotateDeg = rotateDeg\n this.draw()\n rAF(this.run.bind(this, num + 1))\n }\n\n /**\n * 换算渲染坐标\n * @param x\n * @param y\n */\n protected conversionAxis (x: number, y: number): [number, number] {\n const { config } = this\n return [x / config.dpr - this.Radius, y / config.dpr - this.Radius]\n }\n}\n","import Lucky from './lucky'\nimport { UserConfigType, ImgType } from '../types/index'\nimport LuckyGridConfig, {\n BlockType,\n PrizeType,\n ButtonType,\n CellFontType,\n CellImgType,\n RowsType,\n ColsType,\n CellType,\n DefaultConfigType,\n DefaultStyleType,\n ActiveStyleType,\n StartCallbackType,\n EndCallbackType,\n} from '../types/grid'\nimport {\n has,\n isExpectType,\n removeEnter,\n computePadding,\n hasBackground,\n computeRange,\n splitText\n} from '../utils/index'\nimport { roundRectByArc, getLinearGradient } from '../utils/math'\nimport { quad } from '../utils/tween'\n\nexport default class LuckyGrid extends Lucky {\n private rows: RowsType = 3\n private cols: ColsType = 3\n private blocks: Array<BlockType> = []\n private prizes: Array<PrizeType> = []\n private buttons: Array<ButtonType> = []\n private button?: ButtonType\n private defaultConfig: DefaultConfigType = {}\n private defaultStyle: DefaultStyleType = {}\n private activeStyle: ActiveStyleType = {}\n private _defaultConfig: Required<DefaultConfigType> = {} as Required<DefaultConfigType>\n private _defaultStyle: Required<DefaultStyleType> = {} as Required<DefaultStyleType>\n private _activeStyle: Required<ActiveStyleType> = {} as Required<ActiveStyleType>\n private startCallback?: StartCallbackType\n private endCallback?: EndCallbackType\n private cellWidth = 0 // 格子宽度\n private cellHeight = 0 // 格子高度\n private startTime = 0 // 开始时间戳\n private endTime = 0 // 结束时间戳\n private currIndex = 0 // 当前index累加\n private stopIndex = 0 // 刻舟求剑\n private endIndex = 0 // 停止索引\n private demo = false // 是否自动游走\n private timer = 0 // 游走定时器\n private FPS = 16.6 // 屏幕刷新率\n /**\n * 游戏当前的阶段\n * step = 0 时, 游戏尚未开始\n * step = 1 时, 此时处于加速阶段\n * step = 2 时, 此时处于匀速阶段\n * step = 3 时, 此时处于减速阶段\n */\n private step: 0 | 1 | 2 | 3 = 0\n /**\n * 中奖索引\n * prizeFlag = undefined 时, 处于开始抽奖阶段, 正常旋转\n * prizeFlag >= 0 时, 说明stop方法被调用, 并且传入了中奖索引\n * prizeFlag === -1 时, 说明stop方法被调用, 并且传入了负值, 本次抽奖无效\n */\n private prizeFlag: number | undefined = -1\n // 所有格子\n private cells: CellType<CellFontType, CellImgType>[] = []\n // 奖品区域几何信息\n private prizeArea: { x: number, y: number, w: number, h: number } | undefined\n // 图片缓存\n private ImageCache = new Map()\n\n /**\n * 九宫格构造器\n * @param config 配置项\n * @param data 抽奖数据\n */\n constructor (config: UserConfigType, data: LuckyGridConfig) {\n super(config, {\n width: data.width,\n height: data.height\n })\n this.initData(data)\n this.initWatch()\n this.initComputed()\n // 创建前回调函数\n config.beforeCreate?.call(this)\n // 首次初始化\n this.init()\n }\n\n protected resize(): void {\n super.resize()\n this.draw()\n this.config.afterResize?.()\n }\n\n protected initLucky (): void {\n this.cellWidth = 0\n this.cellHeight = 0\n this.startTime = 0\n this.endTime = 0\n this.currIndex = 0\n this.stopIndex = 0\n this.endIndex = 0\n this.demo = false\n this.timer = 0\n this.FPS = 16.6\n this.prizeFlag = -1\n this.step = 0\n super.initLucky()\n }\n\n /**\n * 初始化数据\n * @param data\n */\n private initData (data: LuckyGridConfig): void {\n this.$set(this, 'width', data.width)\n this.$set(this, 'height', data.height)\n this.$set(this, 'rows', Number(data.rows) || 3)\n this.$set(this, 'cols', Number(data.cols) || 3)\n this.$set(this, 'blocks', data.blocks || [])\n this.$set(this, 'prizes', data.prizes || [])\n this.$set(this, 'buttons', data.buttons || [])\n // 临时过渡代码, 升级到2.x即可删除\n this.$set(this, 'button', data.button)\n this.$set(this, 'defaultConfig', data.defaultConfig || {})\n this.$set(this, 'defaultStyle', data.defaultStyle || {})\n this.$set(this, 'activeStyle', data.activeStyle || {})\n this.$set(this, 'startCallback', data.start)\n this.$set(this, 'endCallback', data.end)\n }\n\n /**\n * 初始化属性计算\n */\n private initComputed (): void {\n // 默认配置\n this.$computed(this, '_defaultConfig', () => {\n const config = {\n gutter: 5,\n speed: 20,\n accelerationTime: 2500,\n decelerationTime: 2500,\n ...this.defaultConfig\n }\n config.gutter = this.getLength(config.gutter)\n config.speed = config.speed / 40\n return config\n })\n // 默认样式\n this.$computed(this, '_defaultStyle', () => {\n return {\n borderRadius: 20,\n fontColor: '#000',\n fontSize: '18px',\n fontStyle: 'sans-serif',\n fontWeight: '400',\n background: 'rgba(0,0,0,0)',\n shadow: '',\n wordWrap: true,\n lengthLimit: '90%',\n ...this.defaultStyle\n }\n })\n // 中奖样式\n this.$computed(this, '_activeStyle', () => {\n return {\n background: '#ffce98',\n shadow: '',\n ...this.activeStyle\n }\n })\n }\n\n /**\n * 初始化观察者\n */\n private initWatch (): void {\n // 重置宽度\n this.$watch('width', (newVal: string | number) => {\n this.data.width = newVal\n this.resize()\n })\n // 重置高度\n this.$watch('height', (newVal: string | number) => {\n this.data.height = newVal\n this.resize()\n })\n // 监听 blocks 数据的变化\n this.$watch('blocks', (newData: Array<BlockType>) => {\n this.initImageCache()\n }, { deep: true })\n // 监听 prizes 数据的变化\n this.$watch('prizes', (newData: Array<PrizeType>) => {\n this.initImageCache()\n }, { deep: true })\n // 监听 button 数据的变化\n this.$watch('buttons', (newData: Array<ButtonType>) => {\n this.initImageCache()\n }, { deep: true })\n this.$watch('rows', () => this.init())\n this.$watch('cols', () => this.init())\n this.$watch('defaultConfig', () => this.draw(), { deep: true })\n this.$watch('defaultStyle', () => this.draw(), { deep: true })\n this.$watch('activeStyle', () => this.draw(), { deep: true })\n this.$watch('startCallback', () => this.init())\n this.$watch('endCallback', () => this.init())\n }\n\n /**\n * 初始化 canvas 抽奖\n */\n public async init (): Promise<void> {\n this.initLucky()\n const { config } = this\n // 初始化前回调函数\n config.beforeInit?.call(this)\n // 先画一次防止闪烁\n this.draw()\n // 异步加载图片\n await this.initImageCache()\n // 初始化后回调函数\n config.afterInit?.call(this)\n }\n\n private initImageCache (): Promise<void> {\n return new Promise((resolve) => {\n const btnImgs = this.buttons.map(btn => btn.imgs)\n if (this.button) btnImgs.push(this.button.imgs)\n const willUpdateImgs = {\n blocks: this.blocks.map(block => block.imgs),\n prizes: this.prizes.map(prize => prize.imgs),\n buttons: btnImgs,\n }\n ;(<(keyof typeof willUpdateImgs)[]>Object.keys(willUpdateImgs)).forEach(imgName => {\n const willUpdate = willUpdateImgs[imgName]\n // 循环遍历所有图片\n const allPromise: Promise<void>[] = []\n willUpdate && willUpdate.forEach((imgs, cellIndex) => {\n imgs && imgs.forEach((imgInfo, imgIndex) => {\n allPromise.push(this.loadAndCacheImg(imgName, cellIndex, imgIndex))\n })\n })\n Promise.all(allPromise).then(() => {\n this.draw()\n resolve()\n })\n })\n })\n }\n\n /**\n * canvas点击事件\n * @param e 事件参数\n */\n protected handleClick (e: MouseEvent): void {\n const { ctx } = this\n ;[\n ...this.buttons,\n this.button\n ].forEach(btn => {\n if (!btn) return\n const [x, y, width, height] = this.getGeometricProperty([\n btn.x, btn.y, btn.col || 1, btn.row || 1\n ])\n ctx.beginPath()\n ctx.rect(x, y, width, height)\n if (!ctx.isPointInPath(e.offsetX, e.offsetY)) return\n if (this.step !== 0) return\n // 如果btn里有单独的回调方法, 优先触发\n if (typeof btn.callback === 'function') btn.callback.call(this, btn)\n // 最后触发公共回调\n this.startCallback?.(e, btn)\n })\n }\n\n /**\n * 根据索引单独加载指定图片并缓存\n * @param cellName 模块名称\n * @param cellIndex 模块索引\n * @param imgName 模块对应的图片缓存\n * @param imgIndex 图片索引\n */\n private async loadAndCacheImg (\n cellName: 'blocks' | 'prizes' | 'buttons',\n cellIndex: number,\n imgIndex: number\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n let cell: BlockType | PrizeType | ButtonType = this[cellName][cellIndex]\n // 临时过渡代码, 升级到2.x即可删除\n if (cellName === 'buttons' && !this.buttons.length && this.button) {\n cell = this.button\n }\n if (!cell || !cell.imgs) return\n const imgInfo = cell.imgs[imgIndex]\n if (!imgInfo) return\n // 异步加载图片\n const request = [\n this.loadImg(imgInfo.src, imgInfo),\n imgInfo['activeSrc'] && this.loadImg(imgInfo['activeSrc'], imgInfo, '$activeResolve')\n ]\n Promise.all(request).then(async ([defaultImg, activeImg]) => {\n const formatter = imgInfo.formatter\n // 对图片进行处理\n if (typeof formatter === 'function') {\n defaultImg = await Promise.resolve(formatter.call(this, defaultImg))\n if (activeImg) {\n activeImg = await Promise.resolve(formatter.call(this, activeImg))\n }\n }\n this.ImageCache.set(imgInfo['src'], defaultImg)\n activeImg && this.ImageCache.set(imgInfo['activeSrc'], activeImg)\n resolve()\n }).catch(err => {\n console.error(`${cellName}[${cellIndex}].imgs[${imgIndex}] ${err}`)\n reject()\n })\n })\n }\n\n /**\n * 绘制九宫格抽奖\n */\n protected draw (): void {\n const { config, ctx, _defaultConfig, _defaultStyle, _activeStyle } = this\n // 触发绘制前回调\n config.beforeDraw?.call(this, ctx)\n // 清空画布\n ctx.clearRect(0, 0, this.boxWidth, this.boxHeight)\n // 合并奖品和按钮\n this.cells = [\n ...this.prizes,\n ...this.buttons\n ]\n if (this.button) this.cells.push(this.button)\n this.cells.forEach(cell => {\n cell.col = cell.col || 1\n cell.row = cell.row || 1\n })\n // 计算获取奖品区域的几何信息\n this.prizeArea = this.blocks.reduce(({x, y, w, h}, block, blockIndex) => {\n const [paddingTop, paddingBottom, paddingLeft, paddingRight] = computePadding(block, this.getLength.bind(this))\n const r = block.borderRadius ? this.getLength(block.borderRadius) : 0\n // 绘制边框\n const background = block.background\n if (hasBackground(background)) {\n ctx.fillStyle = this.handleBackground(x, y, w, h, background!)\n roundRectByArc(ctx, x, y, w, h, r)\n ctx.fill()\n }\n // 绘制图片\n block.imgs && block.imgs.forEach((imgInfo, imgIndex) => {\n const blockImg = this.ImageCache.get(imgInfo.src)\n if (!blockImg) return\n // 绘制图片\n const [trueWidth, trueHeight] = this.computedWidthAndHeight(blockImg, imgInfo, w, h)\n const [xAxis, yAxis] = [\n this.getOffsetX(trueWidth, w) + this.getLength(imgInfo.left, w),\n this.getLength(imgInfo.top, h)\n ]\n this.drawImage(ctx, blockImg, x + xAxis, y + yAxis, trueWidth, trueHeight)\n })\n return {\n x: x + paddingLeft,\n y: y + paddingTop,\n w: w - paddingLeft - paddingRight,\n h: h - paddingTop - paddingBottom\n }\n }, { x: 0, y: 0, w: this.boxWidth, h: this.boxHeight })\n // 计算单一奖品格子的宽度和高度\n this.cellWidth = (this.prizeArea.w - _defaultConfig.gutter * (this.cols - 1)) / this.cols\n this.cellHeight = (this.prizeArea.h - _defaultConfig.gutter * (this.rows - 1)) / this.rows\n // 绘制所有格子\n this.cells.forEach((cell, cellIndex) => {\n let [x, y, width, height] = this.getGeometricProperty([cell.x, cell.y, cell.col!, cell.row!])\n // 默认不显示中奖标识\n let isActive = false\n // 只要 prizeFlag 不是负数, 就显示中奖标识\n if (this.prizeFlag === void 0 || this.prizeFlag > -1) {\n isActive = cellIndex === this.currIndex % this.prizes.length >> 0\n }\n // 绘制背景色\n const background = isActive ? _activeStyle.background : (cell.background || _defaultStyle.background)\n if (hasBackground(background)) {\n // 处理阴影 (暂时先用any, 这里后续要优化)\n const shadow: any = (\n isActive ? _activeStyle.shadow : (cell.shadow || _defaultStyle.shadow)\n )\n .replace(/px/g, '') // 清空px字符串\n .split(',')[0].split(' ') // 防止有人声明多个阴影, 截取第一个阴影\n .map((n, i) => i < 3 ? Number(n) : n) // 把数组的前三个值*像素比\n // 绘制阴影\n if (shadow.length === 4) {\n ctx.shadowColor = shadow[3]\n ctx.shadowOffsetX = shadow[0] * config.dpr\n ctx.shadowOffsetY = shadow[1] * config.dpr\n ctx.shadowBlur = shadow[2]\n // 修正(格子+阴影)的位置, 这里使用逗号运算符\n shadow[0] > 0 ? (width -= shadow[0]) : (width += shadow[0], x -= shadow[0])\n shadow[1] > 0 ? (height -= shadow[1]) : (height += shadow[1], y -= shadow[1])\n }\n // 绘制背景\n ctx.fillStyle = this.handleBackground(x, y, width, height, background)\n const borderRadius = this.getLength(cell.borderRadius ? cell.borderRadius : _defaultStyle.borderRadius)\n roundRectByArc(ctx, x, y, width, height, borderRadius)\n ctx.fill()\n // 清空阴影\n ctx.shadowColor = 'rgba(0, 0, 0, 0)'\n ctx.shadowOffsetX = 0\n ctx.shadowOffsetY = 0\n ctx.shadowBlur = 0\n }\n // 修正图片缓存\n let cellName = 'prizes'\n if (cellIndex >= this.prizes.length) {\n cellName = 'buttons'\n cellIndex -= this.prizes.length\n }\n // 绘制图片\n cell.imgs && cell.imgs.forEach((imgInfo, imgIndex) => {\n const cellImg = this.ImageCache.get(imgInfo.src)\n const activeImg = this.ImageCache.get(imgInfo['activeSrc'])\n if (!cellImg) return\n const renderImg = (isActive && activeImg) || cellImg\n if (!renderImg) return\n const [trueWidth, trueHeight] = this.computedWidthAndHeight(renderImg, imgInfo, width, height)\n const [xAxis, yAxis] = [\n x + this.getOffsetX(trueWidth, width) + this.getLength(imgInfo.left, width),\n y + this.getLength(imgInfo.top, height)\n ]\n this.drawImage(ctx, renderImg, xAxis, yAxis, trueWidth, trueHeight)\n })\n // 绘制文字\n cell.fonts && cell.fonts.forEach(font => {\n // 字体样式\n const style = isActive && _activeStyle.fontStyle\n ? _activeStyle.fontStyle\n : (font.fontStyle || _defaultStyle.fontStyle)\n // 字体加粗\n const fontWeight = isActive && _activeStyle.fontWeight\n ? _activeStyle.fontWeight\n : (font.fontWeight || _defaultStyle.fontWeight)\n // 字体大小\n const size = isActive && _activeStyle.fontSize\n ? this.getLength(_activeStyle.fontSize)\n : this.getLength(font.fontSize || _defaultStyle.fontSize)\n // 字体行高\n const lineHeight = isActive && _activeStyle.lineHeight\n ? _activeStyle.lineHeight\n : font.lineHeight || _defaultStyle.lineHeight || font.fontSize || _defaultStyle.fontSize\n const wordWrap = has(font, 'wordWrap') ? font.wordWrap : _defaultStyle.wordWrap\n const lengthLimit = font.lengthLimit || _defaultStyle.lengthLimit\n const lineClamp = font.lineClamp || _defaultStyle.lineClamp\n ctx.font = `${fontWeight} ${size >> 0}px ${style}`\n ctx.fillStyle = (isActive && _activeStyle.fontColor) ? _activeStyle.fontColor : (font.fontColor || _defaultStyle.fontColor)\n let lines = [], text = String(font.text)\n // 计算文字换行\n if (wordWrap) {\n // 最大宽度\n let maxWidth = this.getLength(lengthLimit, width)\n lines = splitText(ctx, removeEnter(text), () => maxWidth, lineClamp)\n } else {\n lines = text.split('\\n')\n }\n lines.forEach((line, lineIndex) => {\n ctx.fillText(\n line,\n x + this.getOffsetX(ctx.measureText(line).width, width) + this.getLength(font.left, width),\n y + this.getLength(font.top, height) + (lineIndex + 1) * this.getLength(lineHeight)\n )\n })\n })\n })\n // 触发绘制后回调\n config.afterDraw?.call(this, ctx)\n }\n\n /**\n * 处理背景色\n * @param x\n * @param y\n * @param width\n * @param height\n * @param background\n * @param isActive\n */\n private handleBackground (\n x: number,\n y: number,\n width: number,\n height: number,\n background: string,\n ) {\n const { ctx } = this\n // 处理线性渐变\n if (background.includes('linear-gradient')) {\n background = getLinearGradient(ctx, x, y, width, height, background)\n }\n return background\n }\n\n /**\n * 刻舟求剑\n */\n private carveOnGunwaleOfAMovingBoat (): void {\n const { _defaultConfig, prizeFlag, currIndex } = this\n this.endTime = Date.now()\n const stopIndex = this.stopIndex = currIndex\n const speed = _defaultConfig.speed\n let i = 0, prevSpeed = 0, prevIndex = 0\n while (++i) {\n const endIndex = this.prizes.length * i + prizeFlag! - (stopIndex)\n const currSpeed = quad.easeOut(this.FPS, stopIndex, endIndex, _defaultConfig.decelerationTime) - stopIndex\n if (currSpeed > speed) {\n this.endIndex = (speed - prevSpeed > currSpeed - speed) ? endIndex : prevIndex\n break\n }\n prevIndex = endIndex\n prevSpeed = currSpeed\n }\n }\n\n /**\n * 对外暴露: 开始抽奖方法\n */\n public play (): void {\n if (this.step !== 0) return\n // 记录游戏开始的时间\n this.startTime = Date.now()\n // 重置中奖索引\n this.prizeFlag = void 0\n // 开始加速\n this.step = 1\n // 触发回调\n this.config.afterStart?.()\n // 开始运行\n this.run()\n }\n\n /**\n * 对外暴露: 缓慢停止方法\n * @param index 中奖索引\n */\n public stop (index?: number): void {\n if (this.step === 0 || this.step === 3) return\n // 如果没有传递中奖索引, 则通过range属性计算一个\n if (!index && index !== 0) {\n const rangeArr = this.prizes.map(item => item.range)\n index = computeRange(rangeArr)\n }\n // 如果index是负数则停止游戏, 反之则传递中奖索引\n if (index < 0) {\n this.step = 0\n this.prizeFlag = -1\n } else {\n this.step = 2\n this.prizeFlag = index % this.prizes.length\n }\n }\n\n /**\n * 实际开始执行方法\n * @param num 记录帧动画执行多少次\n */\n private run (num: number = 0): void {\n const { rAF, step, prizes, prizeFlag, _defaultConfig } = this\n const { accelerationTime, decelerationTime, speed } = _defaultConfig\n // 结束游戏\n if (step === 0) {\n this.endCallback?.(this.prizes.find((prize, index) => index === prizeFlag) || {})\n return\n }\n // 如果等于 -1 就直接停止游戏\n if (prizeFlag === -1) return\n // 计算结束位置\n if (step === 3 && !this.endIndex) this.carveOnGunwaleOfAMovingBoat()\n // 计算时间间隔\n const startInterval = Date.now() - this.startTime\n const endInterval = Date.now() - this.endTime\n let currIndex = this.currIndex\n // \n if (step === 1 || startInterval < accelerationTime) { // 加速阶段\n // 记录帧率\n this.FPS = startInterval / num\n const currSpeed = quad.easeIn(startInterval, 0.1, speed - 0.1, accelerationTime)\n // 加速到峰值后, 进入匀速阶段\n if (currSpeed === speed) {\n this.step = 2\n }\n currIndex = currIndex + currSpeed % prizes.length\n } else if (step === 2) { // 匀速阶段\n // 速度保持不变\n currIndex = currIndex + speed % prizes.length\n // 如果 prizeFlag 有值, 则进入减速阶段\n if (prizeFlag !== void 0 && prizeFlag >= 0) {\n this.step = 3\n // 清空上一次的位置信息\n this.stopIndex = 0\n this.endIndex = 0\n }\n } else if (step === 3) { // 减速阶段\n // 开始缓慢停止\n currIndex = quad.easeOut(endInterval, this.stopIndex, this.endIndex, decelerationTime)\n if (endInterval >= decelerationTime) {\n this.step = 0\n }\n } else {\n // 出现异常\n this.stop(-1)\n }\n this.currIndex = currIndex\n this.draw()\n rAF(this.run.bind(this, num + 1))\n }\n\n /**\n * 计算奖品格子的几何属性\n * @param { array } [...矩阵坐标, col, row]\n * @return { array } [...真实坐标, width, height]\n */\n private getGeometricProperty ([x, y, col = 1, row = 1]: number[]) {\n const { cellWidth, cellHeight } = this\n const gutter = this._defaultConfig.gutter\n let res = [\n this.prizeArea!.x + (cellWidth + gutter) * x,\n this.prizeArea!.y + (cellHeight + gutter) * y\n ]\n col && row && res.push(\n cellWidth * col + gutter * (col - 1),\n cellHeight * row + gutter * (row - 1),\n )\n return res\n }\n\n /**\n * 换算渲染坐标\n * @param x\n * @param y\n */\n protected conversionAxis (x: number, y: number): [number, number] {\n const { config } = this\n return [x / config.dpr, y / config.dpr]\n }\n}\n","import Lucky from './lucky'\nimport { UserConfigType, ImgType, ImgItemType, Tuple } from '../types/index'\nimport SlotMachineConfig, {\n BlockType,\n PrizeType,\n SlotType,\n DefaultConfigType,\n DefaultStyleType,\n EndCallbackType,\n} from '../types/slot'\nimport {\n get,\n has,\n isExpectType,\n removeEnter,\n computePadding,\n hasBackground,\n computeRange,\n splitText,\n getSortedArrayByIndex,\n} from '../utils/index'\nimport { roundRectByArc } from '../utils/math'\nimport { quad } from '../utils/tween'\n\nexport default class SlotMachine extends Lucky {\n // 背景\n private blocks: Array<BlockType> = []\n // 奖品列表\n private prizes: Array<PrizeType> = []\n // 插槽列表\n private slots: Array<SlotType> = []\n // 默认配置\n private defaultConfig: DefaultConfigType = {}\n private _defaultConfig: Required<DefaultConfigType> =\n {} as Required<DefaultConfigType>\n // 默认样式\n private defaultStyle: DefaultStyleType = {}\n private _defaultStyle: Required<DefaultStyleType> =\n {} as Required<DefaultStyleType>\n private endCallback: EndCallbackType = () => {}\n // 离屏canvas\n private _offscreenCanvas?: HTMLCanvasElement\n private cellWidth = 0 // 格子宽度\n private cellHeight = 0 // 格子高度\n private cellAndSpacing = 0 // 格子+间距\n private widthAndSpacing = 0 // 格子宽度+列间距\n private heightAndSpacing = 0 // 格子高度+行间距\n private FPS = 16.6 // 屏幕刷新率\n private scroll: number[] = [] // 滚动的长度\n private stopScroll: number[] = [] // 刻舟求剑\n private endScroll: number[] = [] // 最终停止的长度\n private startTime = 0 // 开始游戏的时间\n private endTime: number[] = [] // 每一列开始停止的时间\n private slotStep: Array<0 | 1 | 2 | 3> = []\n // 默认顺序由 prizes 生成\n private defaultOrder: number[] = []\n /**\n * 游戏当前的整体阶段\n * step = 0 时, 游戏尚未开始\n * step = 1 时, 此时处于加速阶段\n * step = 2 时, 此时处于运行阶段\n */\n private step: 0 | 1 | 2 = 0\n /**\n * 中奖索引\n * prizeFlag = undefined 时, 处于开始抽奖阶段, 正常旋转\n * prizeFlag >= 0 时, 说明stop方法被调用, 并且传入了中奖索引\n * prizeFlag === -1 时, 说明stop方法被调用, 并且传入了负值, 本次抽奖无效\n */\n private prizeFlag: Array<number | undefined> | undefined = void 0\n // 奖品区域几何信息\n private prizeArea?: { x: number; y: number; w: number; h: number }\n // 图片缓存\n private ImageCache = new Map()\n\n /**\n * 老虎机构造器\n * @param config 配置项\n * @param data 抽奖数据\n */\n constructor(config: UserConfigType, data: SlotMachineConfig) {\n super(config, {\n width: data.width,\n height: data.height,\n })\n this.initData(data)\n this.initWatch()\n this.initComputed()\n // 创建前回调函数\n config.beforeCreate?.call(this)\n // 首次初始化\n this.init()\n }\n\n protected resize(): void {\n super.resize()\n this.redrawOffscreenCanvas()\n this.config.afterResize?.()\n }\n\n protected initLucky(): void {\n this.cellWidth = 0\n this.cellHeight = 0\n this.cellAndSpacing = 0\n this.widthAndSpacing = 0\n this.heightAndSpacing = 0\n this.FPS = 16.6\n this.scroll = []\n this.stopScroll = []\n this.endScroll = []\n this.startTime = 0\n this.endTime = []\n this.slotStep = []\n this.prizeFlag = void 0\n this.step = 0\n super.initLucky()\n }\n\n /**\n * 初始化数据\n * @param data\n */\n private initData(data: SlotMachineConfig): void {\n this.$set(this, 'width', data.width)\n this.$set(this, 'height', data.height)\n this.$set(this, 'blocks', data.blocks || [])\n this.$set(this, 'prizes', data.prizes || [])\n this.$set(this, 'slots', data.slots || [])\n this.$set(this, 'defaultConfig', data.defaultConfig || {})\n this.$set(this, 'defaultStyle', data.defaultStyle || {})\n this.$set(this, 'endCallback', data.end)\n }\n\n /**\n * 初始化属性计算\n */\n private initComputed(): void {\n // 默认配置\n this.$computed(this, '_defaultConfig', () => {\n const config = {\n mode: 'vertical',\n rowSpacing: 0,\n colSpacing: 5,\n speed: 20,\n direction: 1,\n accelerationTime: 2500,\n decelerationTime: 2500,\n ...this.defaultConfig,\n }\n config.rowSpacing = this.getLength(config.rowSpacing)\n config.colSpacing = this.getLength(config.colSpacing)\n return config\n })\n // 默认样式\n this.$computed(this, '_defaultStyle', () => {\n return {\n borderRadius: 0,\n fontColor: '#000',\n fontSize: '18px',\n fontStyle: 'sans-serif',\n fontWeight: '400',\n background: 'rgba(0,0,0,0)',\n wordWrap: true,\n lengthLimit: '90%',\n ...this.defaultStyle,\n }\n })\n }\n\n /**\n * 初始化观察者\n */\n private initWatch(): void {\n // 重置宽度\n this.$watch('width', (newVal: string | number) => {\n this.data.width = newVal\n this.resize()\n })\n // 重置高度\n this.$watch('height', (newVal: string | number) => {\n this.data.height = newVal\n this.resize()\n })\n // 监听 blocks 数据的变化\n this.$watch(\n 'blocks',\n (newData: Array<BlockType>) => {\n this.initImageCache()\n },\n { deep: true },\n )\n // 监听 prizes 数据的变化\n this.$watch(\n 'prizes',\n (newData: Array<PrizeType>) => {\n this.initImageCache()\n },\n { deep: true },\n )\n // 监听 prizes 数据的变化\n this.$watch(\n 'slots',\n (newData: Array<PrizeType>) => {\n this.redrawOffscreenCanvas()\n },\n { deep: true },\n )\n this.$watch('defaultConfig', () => this.redrawOffscreenCanvas(), {\n deep: true,\n })\n this.$watch('defaultStyle', () => this.redrawOffscreenCanvas(), {\n deep: true,\n })\n this.$watch('endCallback', () => this.init())\n }\n\n /**\n * 初始化 canvas 抽奖\n */\n public async init(): Promise<void> {\n this.initLucky()\n const { config } = this\n // 初始化前回调函数\n config.beforeInit?.call(this)\n // 先绘制一次\n this.drawOffscreenCanvas()\n this.draw()\n // 异步加载图片\n await this.initImageCache()\n // 初始化后回调函数\n config.afterInit?.call(this)\n }\n\n private redrawOffscreenCanvas(): void {\n this.drawOffscreenCanvas()\n this.draw()\n }\n\n private initImageCache(): Promise<void> {\n return new Promise((resolve) => {\n const willUpdateImgs = {\n blocks: this.blocks.map((block) => block.imgs),\n prizes: this.prizes.map((prize) => prize.imgs),\n }\n ;(<(keyof typeof willUpdateImgs)[]>Object.keys(willUpdateImgs)).forEach(\n (imgName) => {\n const willUpdate = willUpdateImgs[imgName]\n // 循环遍历所有图片\n const allPromise: Promise<void>[] = []\n willUpdate &&\n willUpdate.forEach((imgs, cellIndex) => {\n imgs &&\n imgs.forEach((imgInfo, imgIndex) => {\n allPromise.push(\n this.loadAndCacheImg(imgName, cellIndex, imgIndex),\n )\n })\n })\n Promise.all(allPromise).then(() => {\n this.drawOffscreenCanvas()\n this.draw()\n resolve()\n })\n },\n )\n })\n }\n\n /**\n * 根据索引单独加载指定图片并缓存\n * @param cellName 模块名称\n * @param cellIndex 模块索引\n * @param imgName 模块对应的图片缓存\n * @param imgIndex 图片索引\n */\n private async loadAndCacheImg(\n cellName: 'blocks' | 'prizes',\n cellIndex: number,\n imgIndex: number,\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n let cell: BlockType | PrizeType = this[cellName][cellIndex]\n if (!cell || !cell.imgs) return\n const imgInfo = cell.imgs[imgIndex]\n if (!imgInfo) return\n // 异步加载图片\n this.loadImg(imgInfo.src, imgInfo)\n .then(async (currImg) => {\n if (typeof imgInfo.formatter === 'function') {\n currImg = await Promise.resolve(\n imgInfo.formatter.call(this, currImg),\n )\n }\n this.ImageCache.set(imgInfo['src'], currImg)\n resolve()\n })\n .catch((err) => {\n console.error(`${cellName}[${cellIndex}].imgs[${imgIndex}] ${err}`)\n reject()\n })\n })\n }\n\n /**\n * 绘制离屏canvas\n */\n protected drawOffscreenCanvas(): void {\n const { _defaultConfig, _defaultStyle } = this\n const { w, h } = this.drawBlocks()!\n // 计算单一奖品格子的宽度和高度\n const prizesLen = this.prizes.length\n const { cellWidth, cellHeight, widthAndSpacing, heightAndSpacing } =\n this.displacementWidthOrHeight()\n this.defaultOrder = new Array(prizesLen).fill(void 0).map((v, i) => i)\n let maxOrderLen = 0,\n maxOffWidth = 0,\n maxOffHeight = 0\n this.slots.forEach((slot, slotIndex) => {\n // 初始化 scroll 的值\n if (this.scroll[slotIndex] === void 0) this.scroll[slotIndex] = 0\n // 如果没有order属性, 就填充prizes\n const order = slot.order || this.defaultOrder\n // 计算最大值\n const currLen = order.length\n maxOrderLen = Math.max(maxOrderLen, currLen)\n maxOffWidth = Math.max(maxOffWidth, w + widthAndSpacing * currLen)\n maxOffHeight = Math.max(maxOffHeight, h + heightAndSpacing * currLen)\n })\n // 创建一个离屏Canvas来存储画布的内容\n const { _offscreenCanvas, _ctx } = this.getOffscreenCanvas(\n maxOffWidth,\n maxOffHeight,\n )!\n this._offscreenCanvas = _offscreenCanvas\n // 绘制插槽\n this.slots.forEach((slot, slotIndex) => {\n const cellX = cellWidth * slotIndex\n const cellY = cellHeight * slotIndex\n let lengthOfCopy = 0\n // 绘制奖品\n const newPrizes = getSortedArrayByIndex(\n this.prizes,\n slot.order || this.defaultOrder,\n )\n // 如果没有奖品则打断逻辑\n if (!newPrizes.length) return\n newPrizes.forEach((cell, cellIndex) => {\n if (!cell) return\n const prizesX =\n widthAndSpacing * cellIndex + _defaultConfig.colSpacing / 2\n const prizesY =\n heightAndSpacing * cellIndex + _defaultConfig.rowSpacing / 2\n const [_x, _y, spacing] = this.displacement(\n [cellX, prizesY, heightAndSpacing],\n [prizesX, cellY, widthAndSpacing],\n )\n lengthOfCopy += spacing\n // 绘制背景\n const background = cell.background || _defaultStyle.background\n if (hasBackground(background)) {\n const borderRadius = this.getLength(\n has(cell, 'borderRadius')\n ? cell.borderRadius\n : _defaultStyle.borderRadius,\n )\n roundRectByArc(_ctx, _x, _y, cellWidth, cellWidth, borderRadius)\n _ctx.fillStyle = background\n _ctx.fill()\n }\n // 绘制图片\n cell.imgs &&\n cell.imgs.forEach((imgInfo, imgIndex) => {\n const cellImg = this.ImageCache.get(imgInfo.src)\n if (!cellImg) return\n const [trueWidth, trueHeight] = this.computedWidthAndHeight(\n cellImg,\n imgInfo,\n cellWidth,\n cellHeight,\n )\n const [xAxis, yAxis] = [\n _x +\n this.getOffsetX(trueWidth, cellWidth) +\n this.getLength(imgInfo.left, cellWidth),\n _y + this.getLength(imgInfo.top, cellHeight),\n ]\n this.drawImage(_ctx, cellImg, xAxis, yAxis, trueWidth, trueHeight)\n })\n // 绘制文字\n cell.fonts &&\n cell.fonts.forEach((font) => {\n // 字体样式\n const style = font.fontStyle || _defaultStyle.fontStyle\n // 字体加粗\n const fontWeight = font.fontWeight || _defaultStyle.fontWeight\n // 字体大小\n const size = this.getLength(font.fontSize || _defaultStyle.fontSize)\n // 字体行高\n const lineHeight =\n font.lineHeight ||\n _defaultStyle.lineHeight ||\n font.fontSize ||\n _defaultStyle.fontSize\n const wordWrap = has(font, 'wordWrap')\n ? font.wordWrap\n : _defaultStyle.wordWrap\n const lengthLimit = font.lengthLimit || _defaultStyle.lengthLimit\n const lineClamp = font.lineClamp || _defaultStyle.lineClamp\n _ctx.font = `${fontWeight} ${size >> 0}px ${style}`\n _ctx.fillStyle = font.fontColor || _defaultStyle.fontColor\n let lines = [],\n text = String(font.text)\n // 计算文字换行\n if (wordWrap) {\n // 最大宽度\n let maxWidth = this.getLength(lengthLimit, cellWidth)\n lines = splitText(\n _ctx,\n removeEnter(text),\n () => maxWidth,\n lineClamp,\n )\n } else {\n lines = text.split('\\n')\n }\n lines.forEach((line, lineIndex) => {\n _ctx.fillText(\n line,\n _x +\n this.getOffsetX(_ctx.measureText(line).width, cellWidth) +\n this.getLength(font.left, cellWidth),\n _y +\n this.getLength(font.top, cellHeight) +\n (lineIndex + 1) * this.getLength(lineHeight),\n )\n })\n })\n })\n const [_x, _y, _w, _h] = this.displacement(\n [cellX, 0, cellWidth, lengthOfCopy],\n [0, cellY, lengthOfCopy, cellHeight],\n )\n let drawLen = lengthOfCopy\n while (drawLen < maxOffHeight + lengthOfCopy) {\n const [drawX, drawY] = this.displacement([_x, drawLen], [drawLen, _y])\n this.drawImage(\n _ctx,\n _offscreenCanvas,\n _x,\n _y,\n _w,\n _h,\n drawX,\n drawY,\n _w,\n _h,\n )\n drawLen += lengthOfCopy\n }\n })\n }\n\n /**\n * 绘制背景区域\n */\n protected drawBlocks(): SlotMachine['prizeArea'] {\n const { config, ctx, _defaultConfig, _defaultStyle } = this\n // 绘制背景区域, 并计算奖品区域\n return (this.prizeArea = this.blocks.reduce(\n ({ x, y, w, h }, block, blockIndex) => {\n const [paddingTop, paddingBottom, paddingLeft, paddingRight] =\n computePadding(block, this.getLength.bind(this))\n const r = block.borderRadius ? this.getLength(block.borderRadius) : 0\n // 绘制边框\n const background = block.background || _defaultStyle.background\n if (hasBackground(background)) {\n roundRectByArc(ctx, x, y, w, h, r)\n ctx.fillStyle = background\n ctx.fill()\n }\n // 绘制图片\n block.imgs &&\n block.imgs.forEach((imgInfo, imgIndex) => {\n const blockImg = this.ImageCache.get(imgInfo.src)\n if (!blockImg) return\n // 绘制图片\n const [trueWidth, trueHeight] = this.computedWidthAndHeight(\n blockImg,\n imgInfo,\n w,\n h,\n )\n const [xAxis, yAxis] = [\n this.getOffsetX(trueWidth, w) + this.getLength(imgInfo.left, w),\n this.getLength(imgInfo.top, h),\n ]\n this.drawImage(\n ctx,\n blockImg,\n x + xAxis,\n y + yAxis,\n trueWidth,\n trueHeight,\n )\n })\n return {\n x: x + paddingLeft,\n y: y + paddingTop,\n w: w - paddingLeft - paddingRight,\n h: h - paddingTop - paddingBottom,\n }\n },\n { x: 0, y: 0, w: this.boxWidth, h: this.boxHeight },\n ))\n }\n\n /**\n * 绘制老虎机抽奖\n */\n protected draw(): void {\n const { config, ctx, _defaultConfig, _defaultStyle } = this\n // 触发绘制前回调\n config.beforeDraw?.call(this, ctx)\n // 清空画布\n ctx.clearRect(0, 0, this.boxWidth, this.boxHeight)\n // 绘制背景\n const { x, y, w, h } = this.drawBlocks()!\n // 绘制插槽\n if (!this._offscreenCanvas) return\n const {\n cellWidth,\n cellHeight,\n cellAndSpacing,\n widthAndSpacing,\n heightAndSpacing,\n } = this\n this.slots.forEach((slot, slotIndex) => {\n const order = slot.order || this.defaultOrder\n // 绘制临界点\n const _p = cellAndSpacing * order.length\n // 调整奖品垂直居中\n const start = this.displacement(\n -(h - heightAndSpacing) / 2,\n -(w - widthAndSpacing) / 2,\n )\n let scroll = this.scroll[slotIndex] + start\n // scroll 会无限累加 1 / -1\n if (scroll < 0) {\n scroll = (scroll % _p) + _p\n }\n if (scroll > _p) {\n scroll = scroll % _p\n }\n const [sx, sy, sw, sh] = this.displacement(\n [cellWidth * slotIndex, scroll, cellWidth, h],\n [scroll, cellHeight * slotIndex, w, cellHeight],\n )\n const [dx, dy, dw, dh] = this.displacement(\n [x + widthAndSpacing * slotIndex, y, cellWidth, h],\n [x, y + heightAndSpacing * slotIndex, w, cellHeight],\n )\n this.drawImage(\n ctx,\n this._offscreenCanvas!,\n sx,\n sy,\n sw,\n sh,\n dx,\n dy,\n dw,\n dh,\n )\n })\n }\n\n /**\n * 刻舟求剑\n */\n private carveOnGunwaleOfAMovingBoat(slotIndex: number): void {\n const { _defaultConfig, prizeFlag, cellAndSpacing } = this\n const slot = this.slots[slotIndex]\n const order = slot.order || this.defaultOrder\n if (!order.length || prizeFlag === void 0) return\n const speed = Math.abs(slot.speed || _defaultConfig.speed)\n const direction = slot.direction || _defaultConfig.direction\n const orderIndex = order.findIndex(\n (prizeIndex) => prizeIndex === prizeFlag[slotIndex],\n )\n const _p = cellAndSpacing * order.length\n const stopScroll = (this.stopScroll[slotIndex] = this.scroll[slotIndex])\n this.endTime[slotIndex] = Date.now()\n let i = 0\n while (++i) {\n const endScroll =\n cellAndSpacing * orderIndex + _p * i * direction - stopScroll\n const currSpeed =\n quad.easeOut(\n this.FPS,\n stopScroll,\n endScroll,\n _defaultConfig.decelerationTime,\n ) - stopScroll\n if (Math.abs(currSpeed) > speed) {\n this.endScroll[slotIndex] = endScroll\n break\n }\n }\n }\n\n private hasAllPrizeFlag(): boolean {\n return !!this.prizeFlag?.length && this.prizeFlag.every((flag) => flag !== void 0)\n }\n\n private isAllSlotStopped(): boolean {\n return this.slots.every((slot, slotIndex) => {\n const order = slot.order || this.defaultOrder\n return !order.length || this.slotStep[slotIndex] === 0\n })\n }\n\n private getEndPrize(): PrizeType | undefined {\n if (!this.hasAllPrizeFlag()) return void 0\n const prizeFlag = this.prizeFlag as number[]\n let flag = prizeFlag[0]\n for (let i = 0; i < this.slots.length; i++) {\n const slot = this.slots[i]\n const currFlag = prizeFlag[i]\n const order = slot.order || this.defaultOrder\n if (!order?.includes(currFlag) || flag !== currFlag) {\n flag = -1\n break\n }\n }\n return this.prizes.find((prize, index) => index === flag) || void 0\n }\n\n /**\n * 对外暴露: 开始抽奖方法\n */\n public play(): void {\n if (this.step !== 0) return\n // 记录开始游戏的时间\n this.startTime = Date.now()\n // 清空中奖索引\n this.prizeFlag = void 0\n this.stopScroll = []\n this.endScroll = []\n this.endTime = []\n this.slotStep = this.slots.map((slot) => {\n const order = slot.order || this.defaultOrder\n return order.length ? 1 : 0\n })\n // 开始加速\n this.step = 1\n // 触发回调\n this.config.afterStart?.()\n // 开始渲染\n this.run()\n }\n\n public stop(index: number | number[], slotIndex?: number): void {\n if (this.step === 0) return\n // 设置中奖索引\n if (typeof slotIndex === 'number') {\n if (!Number.isInteger(slotIndex) || slotIndex < 0 || slotIndex >= this.slots.length) {\n return console.error(`stop(${index}, ${slotIndex}) slotIndex 超出范围`)\n }\n if (typeof index !== 'number') {\n return console.error(`stop(${JSON.stringify(index)}, ${slotIndex}) 参数类型不正确`)\n }\n if (this.prizeFlag === void 0 || !this.prizeFlag.length) {\n this.prizeFlag = new Array(this.slots.length).fill(void 0)\n }\n this.prizeFlag[slotIndex] = index\n } else if (typeof index === 'number') {\n this.prizeFlag = new Array(this.slots.length).fill(index)\n } else if (isExpectType(index, 'array')) {\n if (index.length === this.slots.length) {\n this.prizeFlag = index\n } else {\n this.stop(-1)\n return console.error(`stop([${index}]) 参数长度的不正确`)\n }\n } else {\n this.stop(-1)\n return console.error(`stop() 无法识别的参数类型 ${typeof index}`)\n }\n // 如果包含负数则停止游戏, 反之则继续游戏\n if (this.prizeFlag?.includes(-1)) {\n this.prizeFlag = []\n this.slotStep = this.slotStep.map(() => 0)\n // 停止游戏\n this.step = 0\n } else {\n // 进入匀速\n this.step = 2\n }\n }\n\n /**\n * 让游戏动起来\n * @param num 记录帧动画执行多少次\n */\n private run(num: number = 0): void {\n const { rAF, _defaultConfig, cellAndSpacing, slots } = this\n const { accelerationTime, decelerationTime } = _defaultConfig\n const prizeFlag = this.prizeFlag\n if (this.step === 0) {\n if (this.hasAllPrizeFlag() && this.isAllSlotStopped()) {\n this.endCallback?.(this.getEndPrize())\n }\n return\n }\n // 如果长度为 0 就直接停止游戏\n if (prizeFlag !== void 0 && !prizeFlag.length) return\n // 计算时间间隔\n const startInterval = Date.now() - this.startTime\n if (startInterval >= accelerationTime && this.step === 1) {\n this.step = 2\n }\n // 分别计算对应插槽的加速度\n slots.forEach((slot, slotIndex) => {\n const order = slot.order || this.defaultOrder\n if (!order || !order.length) return\n const _p = cellAndSpacing * order.length\n const speed = Math.abs(slot.speed || _defaultConfig.speed)\n const direction = slot.direction || _defaultConfig.direction\n const slotStep = this.slotStep[slotIndex] || 0\n let scroll = 0,\n prevScroll = this.scroll[slotIndex]\n if (!slotStep) return\n if (slotStep === 1 || startInterval < accelerationTime) {\n // 加速阶段\n // 记录帧率\n this.FPS = startInterval / num\n const currSpeed = quad.easeIn(startInterval, 0, speed, accelerationTime)\n // 加速到最大速度后, 即可进入匀速阶段\n if (currSpeed === speed) {\n this.slotStep[slotIndex] = 2\n }\n scroll = (prevScroll + currSpeed * direction) % _p\n } else if (slotStep === 2) {\n // 匀速阶段\n // 速度保持不变\n scroll = (prevScroll + speed * direction) % _p\n // 当前列已经拿到中奖索引, 则单独进入减速阶段\n if (prizeFlag?.[slotIndex] !== void 0) {\n this.slotStep[slotIndex] = 3\n this.scroll[slotIndex] = scroll\n this.carveOnGunwaleOfAMovingBoat(slotIndex)\n }\n } else if (slotStep === 3) {\n // 减速阶段\n // 开始缓慢停止\n const stopScroll = this.stopScroll[slotIndex]\n const endScroll = this.endScroll[slotIndex]\n const endInterval = Date.now() - this.endTime[slotIndex]\n scroll = quad.easeOut(\n endInterval,\n stopScroll,\n endScroll,\n decelerationTime,\n )\n if (endInterval >= decelerationTime) {\n scroll = stopScroll + endScroll\n this.slotStep[slotIndex] = 0\n }\n }\n this.scroll[slotIndex] = scroll\n })\n this.draw()\n if (this.isAllSlotStopped()) {\n this.step = 0\n if (this.hasAllPrizeFlag()) {\n this.endCallback?.(this.getEndPrize())\n }\n return\n }\n rAF(this.run.bind(this, num + 1))\n }\n\n // 根据mode置换数值\n private displacement<T>(a: T, b: T): T {\n return this._defaultConfig.mode === 'horizontal' ? b : a\n }\n\n // 根据mode计算宽高\n private displacementWidthOrHeight() {\n const mode = this._defaultConfig.mode\n const slotsLen = this.slots.length\n const { colSpacing, rowSpacing } = this._defaultConfig\n const { x, y, w, h } = this.prizeArea || this.drawBlocks()!\n let cellWidth = 0,\n cellHeight = 0,\n widthAndSpacing = 0,\n heightAndSpacing = 0\n if (mode === 'horizontal') {\n cellHeight = this.cellHeight =\n (h - rowSpacing * (slotsLen - 1)) / slotsLen\n cellWidth = this.cellWidth = cellHeight\n } else {\n cellWidth = this.cellWidth = (w - colSpacing * (slotsLen - 1)) / slotsLen\n cellHeight = this.cellHeight = cellWidth\n }\n widthAndSpacing = this.widthAndSpacing = this.cellWidth + colSpacing\n heightAndSpacing = this.heightAndSpacing = this.cellHeight + rowSpacing\n if (mode === 'horizontal') {\n this.cellAndSpacing = widthAndSpacing\n } else {\n this.cellAndSpacing = heightAndSpacing\n }\n return {\n cellWidth,\n cellHeight,\n widthAndSpacing,\n heightAndSpacing,\n }\n }\n}\n","import { ImgType } from '../types/index'\nimport { roundRectByArc } from './math'\n\n/**\n * 根据路径获取图片对象\n * @param { string } src 图片路径\n * @returns { Promise<HTMLImageElement> } 图片标签\n */\nexport const getImage = (src: string): Promise<ImgType> => {\n return new Promise((resolve, reject) => {\n const img = new Image()\n img.onload = () => resolve(img)\n img.onerror = err => reject(err)\n img.src = src\n })\n}\n\n/**\n * 切割圆角\n * @param img 将要裁剪的图片对象\n * @param radius 裁剪的圆角半径\n * @returns 返回一个离屏 canvas 用于渲染\n */\nexport const cutRound = (img: ImgType, radius: number): ImgType => {\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')!\n const { width, height } = img\n canvas.width = width\n canvas.height = height\n roundRectByArc(ctx, 0, 0, width, height, radius)\n ctx.clip()\n ctx.drawImage(img, 0, 0, width, height)\n return canvas\n}\n\n/**\n * 透明度\n * @param img 将要处理的图片对象\n * @param opacity 透明度\n * @returns 返回一个离屏 canvas 用于渲染\n */\nexport const opacity = (\n img: ImgType,\n opacity: number\n): ImgType => {\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')!\n const { width, height } = img\n canvas.width = width\n canvas.height = height\n // 绘制图片, 部分浏览器不支持 filter 属性, 需要处理兼容\n if (typeof ctx.filter === 'string') {\n ctx.filter = `opacity(${opacity * 100}%)`\n ctx.drawImage(img, 0, 0, width, height)\n } else {\n ctx.drawImage(img, 0, 0, width, height)\n const imageData = ctx.getImageData(0, 0, width, height)\n const { data } = imageData\n const len = data.length\n for (let i = 0; i < len; i += 4) {\n const alpha = data[i + 3]\n if (alpha !== 0) data[i + 3] = alpha * opacity\n }\n ctx.putImageData(imageData, 0, 0)\n }\n return canvas\n}\n\n/**\n * 权重矩阵\n * @param radius 模糊半径\n * @param sigma \n * @returns 返回一个权重和为1的矩阵\n */\nconst getMatrix = (radius: number, sigma?: number): number[] => {\n sigma = sigma || radius / 3\n const r = Math.ceil(radius)\n const sigma_2 = sigma * sigma\n const sigma2_2 = 2 * sigma_2\n const denominator = 1 / (2 * Math.PI * sigma_2)\n const matrix = []\n let total = 0\n // 计算权重矩阵\n for (let x = -r; x <= r; x++) {\n for (let y = -r; y <= r; y++) {\n // 套用二维高斯函数得到每个点的权重\n const res = denominator * Math.exp(-(x * x + y * y) / sigma2_2)\n matrix.push(res)\n total += res\n }\n }\n // 让矩阵中所有权重的和等于1\n for (let i = 0; i < matrix.length; i++) {\n matrix[i] /= total\n }\n return matrix\n}\n\n/**\n * 高斯模糊\n * @param img 将要处理的图片对象\n * @param radius 模糊半径\n * @returns 返回一个离屏 canvas 用于渲染\n */\nexport const blur = (\n img: ImgType,\n radius: number\n): ImgType => {\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')!\n const { width, height } = img\n // 设置图片宽高\n canvas.width = width\n canvas.height = height\n ctx.drawImage(img, 0, 0, width, height)\n const ImageData = ctx.getImageData(0, 0, width, height)\n const { data } = ImageData\n const matrix = getMatrix(radius)\n const r = Math.ceil(radius)\n const w = width * 4\n const cols = r * 2 + 1\n const len = data.length, matrixLen = matrix.length\n for (let i = 0; i < len; i += 4) {\n // 处理\n }\n console.log(ImageData)\n ctx.putImageData(ImageData, 0, 0)\n return canvas\n}\n\nexport const getBase64Image = () => {\n\n}\n"],"names":["Array","prototype","includes","Object","defineProperty","value","valueToFind","fromIndex","TypeError","o","len","length","n","k","Math","max","abs","sameValueZero","x","y","isNaN","String","search","start","indexOf","find","predicate","thisArg","arguments","kValue","call","__publicField","data","deg","gradient","__spreadValues","__async","lines","shortSide","_x","_y","opacity"],"mappings":"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"}
package/index.js ADDED
@@ -0,0 +1 @@
1
+ module.exports = require('./dist/index.umd.js')
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "@vnpn/lucky-canvas-core",
3
+ "version": "1.7.26",
4
+ "description": "一个基于原生 js 的(大转盘 / 九宫格 / 老虎机)抽奖插件",
5
+ "main": "dist/index.cjs.js",
6
+ "module": "dist/index.esm.js",
7
+ "unpkg": "dist/index.umd.js",
8
+ "jsdelivr": "dist/index.umd.js",
9
+ "types": "types/index.d.ts",
10
+ "scripts": {
11
+ "dev": "rollup --config rollup.config.dev.js -w",
12
+ "build": "npm run build:types && rollup --config rollup.config.build.js",
13
+ "build:types": "tsc -p tsconfig.json --emitDeclarationOnly --declarationDir types"
14
+ },
15
+ "homepage": "https://100px.net",
16
+ "bugs": "https://github.com/LuckDraw/lucky-canvas/issues",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/LuckDraw/lucky-canvas.git",
20
+ "directory": "packages/lucky-canvas"
21
+ },
22
+ "author": "ldq <ldq404@qq.com>",
23
+ "license": "Apache-2.0",
24
+ "files": [
25
+ "dist",
26
+ "types",
27
+ "index.js"
28
+ ],
29
+ "keywords": [
30
+ "大转盘抽奖",
31
+ "九宫格抽奖",
32
+ "老虎机抽奖",
33
+ "抽奖插件",
34
+ "js抽奖",
35
+ "移动端抽奖",
36
+ "canvas抽奖"
37
+ ],
38
+ "devDependencies": {
39
+ "@babel/core": "^7.12.3",
40
+ "@babel/preset-env": "^7.12.1",
41
+ "@babel/plugin-transform-runtime": "^7.16.4",
42
+ "@babel/runtime": "^7.16.3",
43
+ "core-js": "^3.19.2",
44
+ "@rollup/plugin-commonjs": "^16.0.0",
45
+ "@rollup/plugin-eslint": "^8.0.1",
46
+ "@rollup/plugin-json": "^4.1.0",
47
+ "@rollup/plugin-node-resolve": "^10.0.0",
48
+ "@rollup/plugin-typescript": "^6.1.0",
49
+ "@typescript-eslint/parser": "^4.14.0",
50
+ "babel-plugin-external-helpers": "^6.22.0",
51
+ "babel-preset-latest": "^6.24.1",
52
+ "eslint": "^7.18.0",
53
+ "eslint-plugin-prettier": "^3.3.1",
54
+ "prettier": "^2.2.1",
55
+ "rollup": "^2.33.1",
56
+ "rollup-plugin-babel": "^4.4.0",
57
+ "rollup-plugin-livereload": "^2.0.0",
58
+ "rollup-plugin-serve": "^1.1.0",
59
+ "rollup-plugin-terser": "^7.0.2",
60
+ "rollup-plugin-delete": "^2.0.0",
61
+ "rollup-plugin-dts": "^3.0.2",
62
+ "rollup-plugin-typescript2": "^0.30.0",
63
+ "tslib": "^2.3.1",
64
+ "typescript": "^4.0.5"
65
+ },
66
+ "dependencies": {},
67
+ "publishConfig": {
68
+ "registry": "https://registry.npmjs.org/",
69
+ "access": "public"
70
+ }
71
+ }