lucky-scratch 1.0.0 → 1.1.0
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.
- package/dist/index.cjs.js +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +2 -2
- package/package.json +1 -1
- package/types/index.d.ts +25 -0
- package/dist/index.umd.js.map +0 -1
package/dist/index.umd.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","../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/lib/scratch.ts","../src/utils/image.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\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 (!has(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, 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> = {} as Required<DefaultConfigType>\n // 默认样式\n private defaultStyle: DefaultStyleType = {}\n private _defaultStyle: Required<DefaultStyleType> = {} 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 = 0 // 开始停止的时间\n // 默认顺序由 prizes 生成\n private defaultOrder: number[] = []\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 = 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.draw()\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 = 0\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('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 // 监听 prizes 数据的变化\n this.$watch('slots', (newData: Array<PrizeType>) => {\n this.drawOffscreenCanvas()\n this.draw()\n }, { deep: true })\n this.$watch('defaultConfig', () => this.draw(), { deep: true })\n this.$watch('defaultStyle', () => this.draw(), { deep: true })\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 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(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.drawOffscreenCanvas()\n this.draw()\n resolve()\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).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 /**\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 } = this.displacementWidthOrHeight()\n this.defaultOrder = new Array(prizesLen).fill(void 0).map((v, i) => i)\n let maxOrderLen = 0, maxOffWidth = 0, 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(maxOffWidth, maxOffHeight)!\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(this.prizes, slot.order||this.defaultOrder)\n // 如果没有奖品则打断逻辑\n if (!newPrizes.length) return\n newPrizes.forEach((cell, cellIndex) => {\n if (!cell) return\n const prizesX = widthAndSpacing * cellIndex + _defaultConfig.colSpacing / 2\n const prizesY = 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(has(cell, 'borderRadius') ? cell.borderRadius : _defaultStyle.borderRadius)\n roundRectByArc(_ctx, _x, _y, cellWidth, cellWidth, borderRadius)\n _ctx.fillStyle = background\n _ctx.fill()\n }\n // 绘制图片\n cell.imgs && cell.imgs.forEach((imgInfo, imgIndex) => {\n const cellImg = this.ImageCache.get(imgInfo.src)\n if (!cellImg) return\n const [trueWidth, trueHeight] = this.computedWidthAndHeight(cellImg, imgInfo, cellWidth, cellHeight)\n const [xAxis, yAxis] = [\n _x + this.getOffsetX(trueWidth, cellWidth) + 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 && 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 = 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 = font.fontColor || _defaultStyle.fontColor\n let lines = [], text = String(font.text)\n // 计算文字换行\n if (wordWrap) {\n // 最大宽度\n let maxWidth = this.getLength(lengthLimit, cellWidth)\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, cellWidth) + this.getLength(font.left, cellWidth),\n _y + this.getLength(font.top, cellHeight) + (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, _offscreenCanvas,\n _x, _y, _w, _h,\n drawX, drawY, _w, _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(({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 || _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 && 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] = [this.getOffsetX(trueWidth, w) + this.getLength(imgInfo.left, w), this.getLength(imgInfo.top, h)]\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\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 { cellWidth, cellHeight, cellAndSpacing, widthAndSpacing, heightAndSpacing } = 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(-(h - heightAndSpacing) / 2, -(w - widthAndSpacing) / 2)\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(ctx, this._offscreenCanvas!, sx, sy, sw, sh, dx, dy, dw, dh)\n })\n }\n\n /**\n * 刻舟求剑\n */\n private carveOnGunwaleOfAMovingBoat (): void {\n const { _defaultConfig, prizeFlag, cellAndSpacing } = this\n // 记录开始停止的时间戳\n this.endTime = Date.now()\n this.slots.forEach((slot, slotIndex) => {\n const order = slot.order || this.defaultOrder\n if (!order.length) return\n const speed = slot.speed || _defaultConfig.speed\n const direction = slot.direction || _defaultConfig.direction\n const orderIndex = order.findIndex(prizeIndex => prizeIndex === prizeFlag![slotIndex])\n const _p = cellAndSpacing * order.length\n const stopScroll = this.stopScroll[slotIndex] = this.scroll[slotIndex]\n let i = 0\n while (++i) {\n const endScroll = cellAndSpacing * orderIndex + (_p * i * direction) - stopScroll\n const currSpeed = quad.easeOut(this.FPS, stopScroll, endScroll, _defaultConfig.decelerationTime) - stopScroll\n if (Math.abs(currSpeed) > speed) {\n this.endScroll[slotIndex] = endScroll\n break\n }\n }\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 public stop (index: number | number[]): void {\n if (this.step === 0 || this.step === 3) return\n // 设置中奖索引\n 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 // 停止游戏\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, step, prizeFlag, _defaultConfig, cellAndSpacing, slots } = this\n const { accelerationTime, decelerationTime } = _defaultConfig\n // 游戏结束\n if (this.step === 0 && prizeFlag?.length === slots.length) {\n let flag = prizeFlag[0]\n for (let i = 0; i < slots.length; i++) {\n const slot = slots[i], 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 this.endCallback?.(this.prizes.find((prize, index) => index === flag) || void 0)\n return\n }\n // 如果长度为 0 就直接停止游戏\n if (prizeFlag !== void 0 && !prizeFlag.length) return\n // 计算最终停止的位置\n if (this.step === 3 && !this.endScroll.length) this.carveOnGunwaleOfAMovingBoat()\n // 计算时间间隔\n const startInterval = Date.now() - this.startTime\n const endInterval = Date.now() - this.endTime\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 let scroll = 0, prevScroll = this.scroll[slotIndex]\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 scroll = (prevScroll + (currSpeed * direction)) % _p\n } else if (step === 2) { // 匀速阶段\n // 速度保持不变\n scroll = (prevScroll + (speed * direction)) % _p\n // 如果有 prizeFlag 有值, 则进入减速阶段\n if (prizeFlag?.length === slots.length) {\n this.step = 3\n // 清空上一轮的位置信息\n this.stopScroll = []\n this.endScroll = []\n }\n } else if (step === 3 && endInterval) { // 减速阶段\n // 开始缓慢停止\n const stopScroll = this.stopScroll[slotIndex]\n const endScroll = this.endScroll[slotIndex]\n scroll = quad.easeOut(endInterval, stopScroll, endScroll, decelerationTime)\n if (endInterval >= decelerationTime) {\n this.step = 0\n }\n }\n this.scroll[slotIndex] = scroll\n })\n this.draw()\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, cellHeight = 0, widthAndSpacing = 0, heightAndSpacing = 0\n if (mode === 'horizontal') {\n cellHeight = this.cellHeight = (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 Lucky from './lucky'\nimport LuckyScratchConfig from '../types/scratch'\nimport { UserConfigType } from '../types/index'\n\nexport default class LuckyScratch extends Lucky {\n private mask: {\n type?: 'color' | 'image'\n color?: string\n src?: string\n imgObj?: HTMLImageElement\n } = {}\n private scratch: {\n radius: number\n percent: number\n } = {\n radius: 20,\n percent: 0.5,\n }\n // 记录当前刮开的比例\n private progress: number = 0\n // 是否正在刮\n private isScratching: boolean = false\n // 是否已完成(刮开达到阈值)\n private isCompleted: boolean = false\n // 是否禁用刮奖\n public disabled: boolean = false\n // 是否是第一次刮动\n private isFirstScratch: boolean = true\n // 事件是否已绑定\n private eventsInitialized: boolean = false\n // 回调函数\n private onceBeforeStartCallback?: () => boolean | Promise<boolean>\n private beforeStartCallback?: () => boolean | Promise<boolean>\n private startCallback?: () => void\n private endCallback?: () => void\n private successCallback?: (progress: number) => void\n private afterInitCallback?: () => void\n\n /**\n * 刮刮卡构造器\n * @param config 配置项\n * @param data 抽奖数据\n */\n constructor(config: UserConfigType, data: LuckyScratchConfig) {\n super(config, {\n width: data.width || '300px',\n height: data.height || '150px',\n })\n this.initData(data)\n // 首次初始化\n this.init()\n }\n\n protected initData(data: LuckyScratchConfig): void {\n this.$set(this, 'mask', {\n type: 'color',\n color: '#ccc',\n ...data.mask,\n })\n this.$set(this, 'scratch', {\n radius: 20,\n percent: 0.5,\n ...data.scratch,\n })\n this.$set(this, 'onceBeforeStartCallback', data.onceBeforeStart)\n this.$set(this, 'beforeStartCallback', data.beforeStart)\n this.$set(this, 'startCallback', data.start)\n this.$set(this, 'endCallback', data.end)\n this.$set(this, 'successCallback', data.success)\n this.$set(this, 'afterInitCallback', data.afterInit)\n }\n\n /**\n * 重写 resize 方法,在尺寸变化后重新绘制蒙层\n */\n protected resize(): void {\n super.resize()\n // resize 后需要重新绘制蒙层,否则 canvas 尺寸变化会清空内容\n // 注意:draw() 是 async 方法,但这里不需要 await,\n // 因为对于颜色类型的蒙层,绘制是同步的;只有图片类型才需要异步加载\n this.draw()\n this.config.afterResize?.()\n }\n\n public async init(): Promise<void> {\n this.initLucky()\n // 重置状态\n this.progress = 0\n this.isScratching = false\n this.isCompleted = false\n this.isFirstScratch = true // 重置第一次刮动标志\n await this.draw()\n // 绑定事件\n this.handleBindEvents()\n // 触发初始化完成回调\n this.afterInitCallback?.()\n }\n\n private async draw(): Promise<void> {\n // 触发开始回调\n this.config.beforeInit?.()\n // 清空画布\n this.clearCanvas()\n const { mask, scratch } = this\n // 绘制遮罩\n if (mask.type === 'image' && mask.src) {\n // 如果是图片\n const imgObj = await this.loadImg(mask.src, { src: mask.src })\n this.ctx.drawImage(imgObj, 0, 0, this.boxWidth, this.boxHeight)\n } else {\n // 默认为颜色\n this.ctx.fillStyle = mask.color || '#ccc'\n this.ctx.fillRect(0, 0, this.boxWidth, this.boxHeight)\n }\n // 触发绘制结束回调\n this.config.afterInit?.()\n }\n\n private handleBindEvents(): void {\n // 防止重复绑定事件\n if (this.eventsInitialized) return\n this.eventsInitialized = true\n\n const canvas = this.config.canvasElement\n if (!canvas) return\n // 移动端 touch 事件\n canvas.addEventListener('touchstart', (e: TouchEvent) => {\n this.handleStart(e.touches[0])\n })\n canvas.addEventListener('touchmove', (e: TouchEvent) => {\n e.preventDefault()\n this.handleMove(e.touches[0])\n })\n canvas.addEventListener('touchend', () => {\n this.handleEnd()\n })\n // PC 端 mouse 事件\n canvas.addEventListener('mousedown', (e: MouseEvent) => {\n this.handleStart(e)\n })\n canvas.addEventListener('mousemove', (e: MouseEvent) => {\n e.preventDefault()\n this.handleMove(e)\n })\n document.addEventListener('mouseup', () => {\n this.handleEnd()\n })\n }\n\n private async handleStart(e: MouseEvent | Touch): Promise<void> {\n // 如果已完成或被禁用,不再响应事件\n if (this.isCompleted || this.disabled) return\n\n // 调用 onceBeforeStart 钩子(只在第一次刮动时)\n if (this.isFirstScratch && this.onceBeforeStartCallback) {\n try {\n const result = await this.onceBeforeStartCallback()\n if (result === false) {\n // 校验失败,阻止刮奖\n return\n }\n } catch (err) {\n console.error('onceBeforeStart 回调执行出错:', err)\n return\n }\n // 标记已经不是第一次刮动了\n this.isFirstScratch = false\n }\n\n // 调用 beforeStart 钩子(每次刮动都会调用)\n if (this.beforeStartCallback) {\n try {\n const result = await this.beforeStartCallback()\n if (result === false) {\n // 校验失败,阻止刮奖\n return\n }\n } catch (err) {\n console.error('beforeStart 回调执行出错:', err)\n return\n }\n }\n\n this.isScratching = true\n this.startCallback?.()\n this.drawArc(e)\n }\n\n private handleMove(e: MouseEvent | Touch): void {\n if (!this.isScratching || this.isCompleted || this.disabled) return\n this.drawArc(e)\n }\n\n private handleEnd(): void {\n if (!this.isScratching || this.isCompleted || this.disabled) return\n this.isScratching = false\n // 计算刮开比例\n this.checkProgress()\n this.endCallback?.()\n }\n\n private drawArc(e: MouseEvent | Touch): void {\n const canvas = this.config.canvasElement\n if (!canvas) return\n const rect = canvas.getBoundingClientRect()\n const x = (e.clientX - rect.left) * this.config.dpr\n const y = (e.clientY - rect.top) * this.config.dpr\n\n this.ctx.globalCompositeOperation = 'destination-out'\n this.ctx.beginPath()\n this.ctx.arc(x, y, this.scratch.radius * this.config.dpr, 0, Math.PI * 2)\n this.ctx.fill()\n // 恢复混合模式\n this.ctx.globalCompositeOperation = 'source-over'\n }\n\n private checkProgress(): void {\n try {\n const imageData = this.ctx.getImageData(\n 0,\n 0,\n this.boxWidth * this.config.dpr,\n this.boxHeight * this.config.dpr\n )\n const pixels = imageData.data\n let count = 0\n for (let i = 0; i < pixels.length; i += 4) {\n // alpha 通道小于 128 认为已刮开\n if (pixels[i + 3] < 128) {\n count++\n }\n }\n this.progress = count / (pixels.length / 4)\n // 如果达到阈值\n if (this.progress >= this.scratch.percent) {\n this.isCompleted = true // 标记为已完成\n this.clearCanvas() // 自动全部刮开\n this.successCallback?.(this.progress)\n }\n } catch (err) {\n // 可能会遇到跨域图片污染画布的问题\n console.error('无法计算刮开进度,可能是因为图片跨域:', err)\n }\n }\n\n /**\n * 动态设置禁用状态\n * @param disabled 是否禁用\n */\n public setDisabled(disabled: boolean): void {\n this.disabled = disabled\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":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","__generator","body","_","label","sent","trys","ops","f","y","g","Iterator","verb","Symbol","iterator","v","op","pop","push","__spreadArray","to","from","pack","l","ar","slice","concat","SuppressedError","error","suppressed","message","Error","name","includes","defineProperty","valueToFind","fromIndex","o","len","k","Math","max","abs","sameValueZero","x","isNaN","search","start","indexOf","find","predicate","kValue"],"mappings":"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"}
|