@tanzhenxing/zx-lucky-grid
Version:
一个基于 uni-app、Vue3 <script setup> 语法开发的高兼容性幸运转盘组件,适配 H5、小程序、App。可嵌入于 zx-list 组件中,支持丰富的内容、图标、角标、开关、跳转等功能,适合自定义各类列表场景。
1,462 lines (1,449 loc) • 66 kB
JavaScript
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
var t = function(e, i) {
return t = Object.setPrototypeOf || {
__proto__: []
}
instanceof Array && function(t, e) {
t.__proto__ = e
} || function(t, e) {
for (var i in e) Object.prototype.hasOwnProperty.call(e, i) && (t[i] = e[i])
}, t(e, i)
};
function e(e, i) {
if ("function" != typeof i && null !== i) throw new TypeError("Class extends value " + String(i) +
" is not a constructor or null");
function n() {
this.constructor = e
}
t(e, i), e.prototype = null === i ? Object.create(i) : (n.prototype = i.prototype, new n)
}
var i = function() {
return i = Object.assign || function(t) {
for (var e, i = 1, n = arguments.length; i < n; i++)
for (var r in e = arguments[i]) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r]);
return t
}, i.apply(this, arguments)
};
function n(t, e, i, n) {
return new(i || (i = Promise))((function(r, o) {
function a(t) {
try {
h(n.next(t))
} catch (t) {
o(t)
}
}
function s(t) {
try {
h(n.throw(t))
} catch (t) {
o(t)
}
}
function h(t) {
var e;
t.done ? r(t.value) : (e = t.value, e instanceof i ? e : new i((function(t) {
t(e)
}))).then(a, s)
}
h((n = n.apply(t, e || [])).next())
}))
}
function r(t, e) {
var i, n, r, o, a = {
label: 0,
sent: function() {
if (1 & r[0]) throw r[1];
return r[1]
},
trys: [],
ops: []
};
return o = {
next: s(0),
throw: s(1),
return: s(2)
}, "function" == typeof Symbol && (o[Symbol.iterator] = function() {
return this
}), o;
function s(o) {
return function(s) {
return function(o) {
if (i) throw new TypeError("Generator is already executing.");
for (; a;) try {
if (i = 1, n && (r = 2 & o[0] ? n.return : o[0] ? n.throw || ((r = n.return) && r.call(
n), 0) : n.next) && !(r = r.call(n, o[1])).done) return r;
switch (n = 0, r && (o = [2 & o[0], r.value]), o[0]) {
case 0:
case 1:
r = o;
break;
case 4:
return a.label++, {
value: o[1],
done: !1
};
case 5:
a.label++, n = o[1], o = [0];
continue;
case 7:
o = a.ops.pop(), a.trys.pop();
continue;
default:
if (!(r = a.trys, (r = r.length > 0 && r[r.length - 1]) || 6 !== o[0] && 2 !==
o[0])) {
a = 0;
continue
}
if (3 === o[0] && (!r || o[1] > r[0] && o[1] < r[3])) {
a.label = o[1];
break
}
if (6 === o[0] && a.label < r[1]) {
a.label = r[1], r = o;
break
}
if (r && a.label < r[2]) {
a.label = r[2], a.ops.push(o);
break
}
r[2] && a.ops.pop(), a.trys.pop();
continue
}
o = e.call(t, a)
} catch (t) {
o = [6, t], n = 0
} finally {
i = r = 0
}
if (5 & o[0]) throw o[1];
return {
value: o[0] ? o[1] : void 0,
done: !0
}
}([o, s])
}
}
}
function o(t, e) {
for (var i = 0, n = e.length, r = t.length; i < n; i++, r++) t[r] = e[i];
return t
}
Array.prototype.includes || Object.defineProperty(Array.prototype, "includes", {
value: function(t, e) {
if (null == this) throw new TypeError('"this" is null or not defined');
var i = Object(this),
n = i.length >>> 0;
if (0 === n) return !1;
var r, o, a = 0 | e,
s = Math.max(a >= 0 ? a : n - Math.abs(a), 0);
for (; s < n;) {
if ((r = i[s]) === (o = t) || "number" == typeof r && "number" == typeof o && isNaN(r) && isNaN(
o)) return !0;
s++
}
return !1
}
}), String.prototype.includes || (String.prototype.includes = function(t, e) {
return "number" != typeof e && (e = 0), !(e + t.length > this.length) && -1 !== this.indexOf(t, e)
}), Array.prototype.find || Object.defineProperty(Array.prototype, "find", {
value: function(t) {
if (null == this) throw new TypeError('"this" is null or not defined');
var e = Object(this),
i = e.length >>> 0;
if ("function" != typeof t) throw new TypeError("predicate must be a function");
for (var n = arguments[1], r = 0; r < i;) {
var o = e[r];
if (t.call(n, o, r, e)) return o;
r++
}
}
});
var a = function(t) {
for (var e = [], i = 1; i < arguments.length; i++) e[i - 1] = arguments[i];
return e.some((function(e) {
return Object.prototype.toString.call(t).slice(8, -1).toLowerCase() === e
}))
},
s = function(t, e) {
return Object.prototype.hasOwnProperty.call(t, e)
},
h = function(t) {
return [].filter.call(t, (function(t) {
return "\n" !== t
})).join("")
},
c = function(t) {
if ("string" != typeof t) return !1;
if ("transparent" === (t = t.toLocaleLowerCase().trim())) return !1;
if (/^rgba/.test(t)) {
var e = /([^\s,]+)\)$/.exec(t);
if (0 === (null === (i = e) ? 0 : "object" == typeof i ? NaN : "number" == typeof i ? i : "string" ==
typeof i ? "%" === i[i.length - 1] ? Number(i.slice(0, -1)) / 100 : Number(i) : NaN)) return !1
}
var i;
return !0
},
l = function(t, e) {
var i, n = (null === (i = t.padding) || void 0 === i ? void 0 : i.split(" ").map((function(t) {
return e(t)
}))) || [0],
r = 0,
o = 0,
h = 0,
c = 0;
switch (n.length) {
case 1:
r = o = h = c = n[0];
break;
case 2:
r = o = n[0], h = c = n[1];
break;
case 3:
r = n[0], h = c = n[1], o = n[2];
break;
default:
r = n[0], o = n[1], h = n[2], c = n[3]
}
var l = {
paddingTop: r,
paddingBottom: o,
paddingLeft: h,
paddingRight: c
};
for (var u in l) l[u] = s(t, u) && a(t[u], "string", "number") ? e(t[u]) : l[u];
return [r, o, h, c]
},
u = function(t) {
var e = [],
i = t.map((function(t) {
return Number(t)
})).reduce((function(t, i) {
if (i > 0) {
var n = t + i;
return e.push(n), n
}
return e.push(NaN), t
}), 0),
n = Math.random() * i;
return e.findIndex((function(t) {
return n <= t
}))
},
f = function(t, e, i, n) {
void 0 === n && (n = 1 / 0), n <= 0 && (n = 1 / 0);
for (var r = "", o = [], a = t.measureText("...").width, s = 0; s < e.length; s++) {
r += e[s];
var h = t.measureText(r).width,
c = i(o);
if (n === o.length + 1 && (h += a), c < 0) return o;
if (h > c && (o.push(r.slice(0, -1)), r = e[s]), n === o.length) return o[o.length - 1] += "...", o
}
return r && o.push(r), o.length || o.push(e), o
},
d = function() {
function t() {
this.subs = []
}
return t.prototype.addSub = function(t) {
this.subs.includes(t) || this.subs.push(t)
}, t.prototype.notify = function() {
this.subs.forEach((function(t) {
t.update()
}))
}, t
}(),
p = "__proto__" in {};
function g(t, e, i, n) {
Object.defineProperty(t, e, {
value: i,
enumerable: !!n,
writable: !0,
configurable: !0
})
}
var v = Array.prototype,
m = Object.create(v);
["push", "pop", "shift", "unshift", "sort", "splice", "reverse"].forEach((function(t) {
m[t] = function() {
for (var e = [], i = 0; i < arguments.length; i++) e[i] = arguments[i];
var n = v[t].apply(this, e),
r = this.__luckyOb__;
return ["push", "unshift", "splice"].includes(t) && r.walk(this), r.dep.notify(), n
}
}));
var w = function() {
function t(t) {
this.dep = new d, g(t, "__luckyOb__", this), Array.isArray(t) && (p ? t.__proto__ = m : Object
.getOwnPropertyNames(m).forEach((function(e) {
g(t, e, m[e])
}))), this.walk(t)
}
return t.prototype.walk = function(t) {
Object.keys(t).forEach((function(e) {
b(t, e, t[e])
}))
}, t
}();
function y(t) {
if (t && "object" == typeof t) return "__luckyOb__" in t ? t.__luckyOb__ : new w(t)
}
function b(t, e, i) {
var n = new d,
r = Object.getOwnPropertyDescriptor(t, e);
if (!r || !1 !== r.configurable) {
var o = r && r.get,
a = r && r.set;
o && !a || 2 !== arguments.length || (i = t[e]);
var s = y(i);
Object.defineProperty(t, e, {
get: function() {
var e = o ? o.call(t) : i;
return d.target && (n.addSub(d.target), s && s.dep.addSub(d.target)), e
},
set: function(e) {
e !== i && (i = e, o && !a || (a ? a.call(t, e) : i = e, s = y(e), n.notify()))
}
})
}
}
var S = 0,
C = function() {
function t(t, e, i, n) {
void 0 === n && (n = {}), this.id = S++, this.$lucky = t, this.expr = e, this.deep = !!n.deep, this.getter =
"function" == typeof e ? e : function(t) {
t += ".";
for (var e = [], i = "", n = 0; n < t.length; n++) {
var r = t[n];
if (/\[|\./.test(r)) e.push(i), i = "";
else {
if (/\W/.test(r)) continue;
i += r
}
}
return function(t) {
return e.reduce((function(t, e) {
return t[e]
}), t)
}
}(e), this.cb = i, this.value = this.get()
}
return t.prototype.get = function() {
d.target = this;
var t = this.getter.call(this.$lucky, this.$lucky);
return this.deep && function(t) {
var e = function(t) {
a(t, "array", "object") && Object.keys(t).forEach((function(i) {
var n = t[i];
e(n)
}))
};
e(t)
}(t), d.target = null, t
}, t.prototype.update = function() {
var t = this.get(),
e = this.value;
this.value = t, this.cb.call(this.$lucky, t, e)
}, t
}(),
z = function() {
function t(t, e) {
var i = this;
this.version = "1.7.26", this.htmlFontSize = 16, this.rAF = function() {}, this.boxWidth = 0, this
.boxHeight = 0, "string" == typeof t ? t = {
el: t
} : 1 === t.nodeType && (t = {
el: "",
divElement: t
}), t = t, this.config = t, this.data = e, t.flag || (t.flag = "WEB"), t.el && (t.divElement = document
.querySelector(t.el)), t.divElement && (t.canvasElement = document.createElement("canvas"), t
.divElement.appendChild(t.canvasElement)), t.canvasElement && (t.ctx = t.canvasElement.getContext(
"2d"), t.canvasElement.setAttribute("package", "lucky-canvas@1.7.26"), t.canvasElement
.addEventListener("click", (function(t) {
return i.handleClick(t)
}))), this.ctx = t.ctx, this.initWindowFunction(), this.config.ctx || console.error(
"无法获取到 CanvasContext2D"), window && "function" == typeof window.addEventListener && window
.addEventListener("resize", function(t, e) {
void 0 === e && (e = 300);
var i = null;
return function() {
for (var n = this, r = [], o = 0; o < arguments.length; o++) r[o] = arguments[o];
i || (i = setTimeout((function() {
t.apply(n, r), clearTimeout(i), i = null
}), e))
}
}((function() {
return i.resize()
}), 300)), window && "function" == typeof window.MutationObserver && new window.MutationObserver((
function() {
i.resize()
})).observe(document.documentElement, {
attributes: !0
})
}
return t.prototype.resize = function() {
var t, e;
null === (e = (t = this.config).beforeResize) || void 0 === e || e.call(t), this.setHTMLFontSize(), this
.setDpr(), this.resetWidthAndHeight(), this.zoomCanvas()
}, t.prototype.initLucky = function() {
if (this.resize(), !this.boxWidth || !this.boxHeight) return console.error("无法获取到宽度或高度")
}, t.prototype.handleClick = function(t) {}, t.prototype.setHTMLFontSize = function() {
window && (this.htmlFontSize = +window.getComputedStyle(document.documentElement).fontSize.slice(0, -2))
}, t.prototype.clearCanvas = function() {
var t = [this.boxWidth, this.boxHeight],
e = t[0],
i = t[1];
this.ctx.clearRect(-e, -i, 2 * e, 2 * i)
}, t.prototype.setDpr = function() {
var t = this.config;
t.dpr || (window ? window.dpr = t.dpr = window.devicePixelRatio || 1 : t.dpr || console.error(t,
"未传入 dpr 可能会导致绘制异常"))
}, t.prototype.resetWidthAndHeight = function() {
var t = this.config,
e = this.data,
i = 0,
n = 0;
t.divElement && (i = t.divElement.offsetWidth, n = t.divElement.offsetHeight), this.boxWidth = this
.getLength(e.width || t.width) || i, this.boxHeight = this.getLength(e.height || t.height) || n, t
.divElement && (t.divElement.style.overflow = "hidden", t.divElement.style.width = this.boxWidth +
"px", t.divElement.style.height = this.boxHeight + "px")
}, t.prototype.zoomCanvas = function() {
var t = this.config,
e = this.ctx,
i = t.canvasElement,
n = t.dpr,
r = [this.boxWidth * n, this.boxHeight * n],
o = r[0],
a = r[1];
i && (i.width = o, i.height = a, i.style.width = o + "px", i.style.height = a + "px", i.style[
"transform-origin"] = "left top", i.style.transform = "scale(" + 1 / n + ")", e.scale(n, n))
}, t.prototype.initWindowFunction = function() {
var t = this.config;
if (window) return this.rAF = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame || function(t) {
window.setTimeout(t, 1e3 / 60)
}, t.setTimeout = window.setTimeout, t.setInterval = window.setInterval, t.clearTimeout = window
.clearTimeout, void(t.clearInterval = window.clearInterval);
if (t.rAF) this.rAF = t.rAF;
else if (t.setTimeout) {
var e = t.setTimeout;
this.rAF = function(t) {
return e(t, 16.7)
}
} else this.rAF = function(t) {
return setTimeout(t, 16.7)
}
}, t.prototype.isWeb = function() {
return ["WEB", "UNI-H5", "TARO-H5"].includes(this.config.flag)
}, t.prototype.loadImg = function(t, e, i) {
var n = this;
return void 0 === i && (i = "$resolve"), new Promise((function(r, o) {
if (t || o("=> '" + e.src + "' 不能为空或不合法"), "WEB" !== n.config.flag) return e[i] = r,
void(e.$reject = o);
var a = new Image;
a.crossorigin = "anonymous", a.onload = function() {
return r(a)
}, a.onerror = function() {
return o("=> '" + e.src + "' 图片加载失败")
}, a.src = t
}))
}, t.prototype.drawImage = function(t, e) {
for (var i, n, r, a = [], s = 2; s < arguments.length; s++) a[s - 2] = arguments[s];
var h = this.config,
c = h.flag,
l = h.dpr;
if (["WEB", "MP-WX"].includes(c)) r = e;
else {
if (!["UNI-H5", "UNI-MP", "TARO-H5", "TARO-MP"].includes(c)) return console.error(
"意料之外的 flag, 该平台尚未兼容!");
r = e.path
}
var u = null === (n = (i = r.canvas || r).getContext) || void 0 === n ? void 0 : n.call(i, "2d");
if (u && !this.isWeb()) {
a = a.map((function(t) {
return t * l
}));
var f = u.getImageData.apply(u, a.slice(0, 4));
t.putImageData.apply(t, o([f], a.slice(4, 6)))
} else {
8 === a.length && (a = a.map((function(t, e) {
return e < 4 ? t * l : t
})));
try {
t.drawImage.apply(t, o([r], a))
} catch (t) {}
}
}, t.prototype.computedWidthAndHeight = function(t, e, i, n) {
if (!e.width && !e.height) return [t.width, t.height];
if (e.width && !e.height) {
var r = this.getLength(e.width, i);
return [r, t.height * (r / t.width)]
}
if (!e.width && e.height) {
var o = this.getLength(e.height, n);
return [t.width * (o / t.height), o]
}
return [this.getLength(e.width, i), this.getLength(e.height, n)]
}, t.prototype.changeUnits = function(t, e) {
var i = this;
void 0 === e && (e = 1);
var n = this.config;
return Number(t.replace(/^([-]*[0-9.]*)([a-z%]*)$/, (function(t, r, o) {
var a = {
"%": function(t) {
return t * (e / 100)
},
px: function(t) {
return 1 * t
},
rem: function(t) {
return t * i.htmlFontSize
},
vw: function(t) {
return t / 100 * window.innerWidth
}
} [o];
if (a) return a(r);
var s = n.handleCssUnit || n.unitFunc;
return s ? s(r, o) : r
})))
}, t.prototype.getLength = function(t, e) {
return a(t, "number") ? t : a(t, "string") ? this.changeUnits(t, e) : 0
}, t.prototype.getOffsetX = function(t, e) {
return void 0 === e && (e = 0), (e - t) / 2
}, t.prototype.getOffscreenCanvas = function(t, e) {
if (!s(this, "_offscreenCanvas") && (window && window.document && "WEB" === this.config.flag ? this
._offscreenCanvas = document.createElement("canvas") : this._offscreenCanvas = this.config
.offscreenCanvas, !this._offscreenCanvas)) return console.error("离屏 Canvas 无法渲染!");
var i = this.config.dpr,
n = this._offscreenCanvas;
n.width = (t || 300) * i, n.height = (e || 150) * i;
var r = n.getContext("2d");
return r.clearRect(0, 0, t, e), r.scale(i, i), r.dpr = i, {
_offscreenCanvas: n,
_ctx: r
}
}, t.prototype.$set = function(t, e, i) {
t && "object" == typeof t && b(t, e, i)
}, t.prototype.$computed = function(t, e, i) {
var n = this;
Object.defineProperty(t, e, {
get: function() {
return i.call(n)
}
})
}, t.prototype.$watch = function(t, e, i) {
void 0 === i && (i = {}), "object" == typeof e && (e = (i = e).handler);
var n = new C(this, t, e, i);
return i.immediate && e.call(this, n.value),
function() {}
}, t.version = "1.7.26", t
}(),
x = function(t) {
return Math.PI / 180 * t
},
k = function(t, e, i, n, r, o) {
t.beginPath();
var a, s, h = x(90 / Math.PI / i * o),
c = n + h,
l = r - h;
t.arc(0, 0, i, c, l, !1), t.lineTo.apply(t, (a = (n + r) / 2, s = o / 2 / Math.abs(Math.sin((n - r) / 2)), [+(
Math.cos(a) * s).toFixed(8), +(Math.sin(a) * s).toFixed(8)])), t.closePath()
},
I = function(t) {
for (var e = [], i = 1; i < arguments.length; i++) e[i - 1] = arguments[i];
var n = e[0],
r = e[1],
o = e[2],
a = e[3],
s = e[4],
h = Math.min(o, a),
c = Math.PI;
s > h / 2 && (s = h / 2), t.beginPath(), t.moveTo(n + s, r), t.lineTo(n + s, r), t.lineTo(n + o - s, r), t.arc(
n + o - s, r + s, s, -c / 2, 0), t.lineTo(n + o, r + a - s), t.arc(n + o - s, r + a - s, s, 0, c / 2), t
.lineTo(n + s, r + a), t.arc(n + s, r + a - s, s, c / 2, c), t.lineTo(n, r + s), t.arc(n + s, r + s, s, c, -
c / 2), t.closePath()
},
A = function(t, e, i, n) {
return t >= n && (t = n), i * (t /= n) * t + e
},
L = function(t, e, i, n) {
return t >= n && (t = n), -i * (t /= n) * (t - 2) + e
},
T = function(t) {
function o(e, i) {
var n, r = t.call(this, e, {
width: i.width,
height: i.height
}) || this;
return r.blocks = [], r.prizes = [], r.buttons = [], r.defaultConfig = {}, r.defaultStyle = {}, r
._defaultConfig = {}, r._defaultStyle = {}, r.Radius = 0, r.prizeRadius = 0, r.prizeDeg = 0, r
.prizeAng = 0, r.rotateDeg = 0, r.maxBtnRadius = 0, r.startTime = 0, r.endTime = 0, r.stopDeg = 0, r
.endDeg = 0, r.FPS = 16.6, r.step = 0, r.ImageCache = new Map, r.initData(i), r.initWatch(), r
.initComputed(), null === (n = e.beforeCreate) || void 0 === n || n.call(r), r.init(), r
}
return e(o, t), o.prototype.resize = function() {
var e, i;
t.prototype.resize.call(this), this.Radius = Math.min(this.boxWidth, this.boxHeight) / 2, this.ctx
.translate(this.Radius, this.Radius), this.draw(), null === (i = (e = this.config).afterResize) ||
void 0 === i || i.call(e)
}, o.prototype.initLucky = function() {
this.Radius = 0, this.prizeRadius = 0, this.prizeDeg = 0, this.prizeAng = 0, this.rotateDeg = 0, this
.maxBtnRadius = 0, this.startTime = 0, this.endTime = 0, this.stopDeg = 0, this.endDeg = 0, this
.FPS = 16.6, this.prizeFlag = -1, this.step = 0, t.prototype.initLucky.call(this)
}, o.prototype.initData = function(t) {
this.$set(this, "width", t.width), this.$set(this, "height", t.height), this.$set(this, "blocks", t
.blocks || []), this.$set(this, "prizes", t.prizes || []), this.$set(this, "buttons", t
.buttons || []), this.$set(this, "defaultConfig", t.defaultConfig || {}), this.$set(this,
"defaultStyle", t.defaultStyle || {}), this.$set(this, "startCallback", t.start), this.$set(
this, "endCallback", t.end)
}, o.prototype.initComputed = function() {
var t = this;
this.$computed(this, "_defaultConfig", (function() {
return i({
gutter: "0px",
offsetDegree: 0,
speed: 20,
speedFunction: "quad",
accelerationTime: 2500,
decelerationTime: 2500,
stopRange: 0
}, t.defaultConfig)
})), this.$computed(this, "_defaultStyle", (function() {
return i({
fontSize: "18px",
fontColor: "#000",
fontStyle: "sans-serif",
fontWeight: "400",
background: "rgba(0,0,0,0)",
wordWrap: !0,
lengthLimit: "90%"
}, t.defaultStyle)
}))
}, o.prototype.initWatch = function() {
var t = this;
this.$watch("width", (function(e) {
t.data.width = e, t.resize()
})), this.$watch("height", (function(e) {
t.data.height = e, t.resize()
})), this.$watch("blocks", (function(e) {
t.initImageCache()
}), {
deep: !0
}), this.$watch("prizes", (function(e) {
t.initImageCache()
}), {
deep: !0
}), this.$watch("buttons", (function(e) {
t.initImageCache()
}), {
deep: !0
}), this.$watch("defaultConfig", (function() {
return t.draw()
}), {
deep: !0
}), this.$watch("defaultStyle", (function() {
return t.draw()
}), {
deep: !0
}), this.$watch("startCallback", (function() {
return t.init()
})), this.$watch("endCallback", (function() {
return t.init()
}))
}, o.prototype.init = function() {
var t, e;
return n(this, void 0, void 0, (function() {
var i;
return r(this, (function(n) {
switch (n.label) {
case 0:
return this.initLucky(), i = this.config, null === (t = i
.beforeInit) || void 0 === t || t.call(this), this
.draw(), this.draw(), [4, this.initImageCache()];
case 1:
return n.sent(), null === (e = i.afterInit) || void 0 === e || e
.call(this), [2]
}
}))
}))
}, o.prototype.initImageCache = function() {
var t = this;
return new Promise((function(e) {
var i = {
blocks: t.blocks.map((function(t) {
return t.imgs
})),
prizes: t.prizes.map((function(t) {
return t.imgs
})),
buttons: t.buttons.map((function(t) {
return t.imgs
}))
};
Object.keys(i).forEach((function(n) {
var r = i[n],
o = [];
r && r.forEach((function(e, i) {
e && e.forEach((function(e, r) {
o.push(t.loadAndCacheImg(n, i, r))
}))
})), Promise.all(o).then((function() {
t.draw(), e()
}))
}))
}))
}, o.prototype.handleClick = function(t) {
var e, i = this.ctx;
i.beginPath(), i.arc(0, 0, this.maxBtnRadius, 0, 2 * Math.PI, !1), i.isPointInPath(t.offsetX, t
.offsetY) && 0 === this.step && (null === (e = this.startCallback) || void 0 === e || e.call(this,
t))
}, o.prototype.loadAndCacheImg = function(t, e, i) {
return n(this, void 0, void 0, (function() {
var o = this;
return r(this, (function(a) {
return [2, new Promise((function(a, s) {
var h = o[t][e];
if (h && h.imgs) {
var c = h.imgs[i];
c && o.loadImg(c.src, c).then((function(t) {
return n(o, void 0, void 0, (
function() {
return r(this, (
function(
e
) {
switch (
e
.label
) {
case 0:
return "function" !=
typeof c
.formatter ?
[3,
2] :
[4, Promise
.resolve(
c
.formatter
.call(
this,
t
)
)
];
case 1:
t = e
.sent(),
e
.label =
2;
case 2:
return this
.ImageCache
.set(
c
.src,
t
),
a(),
[
2]
}
}))
}))
})).catch((function(n) {
console.error(t + "[" + e +
"].imgs[" + i + "] " + n
), s()
}))
}
}))]
}))
}))
}, o.prototype.drawBlock = function(t, e, i) {
var n = this,
r = this.ctx;
c(e.background) && (r.beginPath(), r.fillStyle = e.background, r.arc(0, 0, t, 0, 2 * Math.PI, !1), r
.fill()), e.imgs && e.imgs.forEach((function(e, i) {
var o = n.ImageCache.get(e.src);
if (o) {
var a = n.computedWidthAndHeight(o, e, 2 * t, 2 * t),
s = a[0],
h = a[1],
c = [n.getOffsetX(s) + n.getLength(e.left, 2 * t), n.getLength(e.top, 2 * t) -
t],
l = c[0],
u = c[1];
r.save(), e.rotate && r.rotate(x(n.rotateDeg)), n.drawImage(r, o, l, u, s, h), r
.restore()
}
}))
}, o.prototype.draw = function() {
var t, e, i = this,
n = this,
r = n.config,
o = n.ctx,
a = n._defaultConfig,
l = n._defaultStyle;
null === (t = r.beforeDraw) || void 0 === t || t.call(this, o), o.clearRect(-this.Radius, -this.Radius,
2 * this.Radius, 2 * this.Radius), this.prizeRadius = this.blocks.reduce((function(t, e, n) {
return i.drawBlock(t, e, n), t - i.getLength(e.padding && e.padding.split(" ")[0])
}), this.Radius), this.prizeDeg = 360 / this.prizes.length, this.prizeAng = x(this.prizeDeg);
var u = this.prizeRadius * Math.sin(this.prizeAng / 2) * 2,
d = x(this.rotateDeg - 90 + this.prizeDeg / 2 + a.offsetDegree),
p = function(t, e) {
return i.getOffsetX(o.measureText(e).width) + i.getLength(t.left, u)
},
g = function(t, e, n) {
var r = t.lineHeight || l.lineHeight || t.fontSize || l.fontSize;
return i.getLength(t.top, e) + (n + 1) * i.getLength(r)
};
o.save(), this.prizes.forEach((function(t, e) {
var n = d + e * i.prizeAng,
r = i.prizeRadius - i.maxBtnRadius,
v = t.background || l.background;
c(v) && (o.fillStyle = v, k(o, i.maxBtnRadius, i.prizeRadius, n - i.prizeAng / 2, n + i
.prizeAng / 2, i.getLength(a.gutter)), o.fill());
var m = Math.cos(n) * i.prizeRadius,
w = Math.sin(n) * i.prizeRadius;
o.translate(m, w), o.rotate(n + x(90)), t.imgs && t.imgs.forEach((function(t, e) {
var n = i.ImageCache.get(t.src);
if (n) {
var a = i.computedWidthAndHeight(n, t, i.prizeAng * i.prizeRadius,
r),
s = a[0],
h = a[1],
c = [i.getOffsetX(s) + i.getLength(t.left, u), i.getLength(t
.top, r)],
l = c[0],
f = c[1];
i.drawImage(o, n, l, f, s, h)
}
})), t.fonts && t.fonts.forEach((function(t) {
var e = t.fontColor || l.fontColor,
n = t.fontWeight || l.fontWeight,
c = i.getLength(t.fontSize || l.fontSize),
u = t.fontStyle || l.fontStyle,
d = s(t, "wordWrap") ? t.wordWrap : l.wordWrap,
v = t.lengthLimit || l.lengthLimit,
m = t.lineClamp || l.lineClamp;
o.fillStyle = e, o.font = n + " " + (c >> 0) + "px " + u;
var w = String(t.text);
(d ? f(o, h(w), (function(e) {
var n = 2 * ((i.prizeRadius - g(t, r, e.length)) * Math
.tan(i.prizeAng / 2)) - i.getLength(a.gutter);
return i.getLength(v, n)
}), m) : w.split("\n")).filter((function(t) {
return !!t
})).forEach((function(e, i) {
o.fillText(e, p(t, e), g(t, r, i))
}))
})), o.rotate(x(360) - n - x(90)), o.translate(-m, -w)
})), o.restore(), this.buttons.forEach((function(t, e) {
var n = i.getLength(t.radius, i.prizeRadius);
i.maxBtnRadius = Math.max(i.maxBtnRadius, n), c(t.background) && (o.beginPath(), o
.fillStyle = t.background, o.arc(0, 0, n, 0, 2 * Math.PI, !1), o.fill()), t
.pointer && c(t.background) && (o.beginPath(), o.fillStyle = t.background, o.moveTo(
-n, 0), o.lineTo(n, 0), o.lineTo(0, 2 * -n), o.closePath(), o.fill()), t.imgs &&
t.imgs.forEach((function(t, e) {
var r = i.ImageCache.get(t.src);
if (r) {
var a = i.computedWidthAndHeight(r, t, 2 * n, 2 * n),
s = a[0],
h = a[1],
c = [i.getOffsetX(s) + i.getLength(t.left, n), i.getLength(t
.top, n)],
l = c[0],
u = c[1];
i.drawImage(o, r, l, u, s, h)
}
})), t.fonts && t.fonts.forEach((function(t) {
var e = t.fontColor || l.fontColor,
r = t.fontWeight || l.fontWeight,
a = i.getLength(t.fontSize || l.fontSize),
s = t.fontStyle || l.fontStyle;
o.fillStyle = e, o.font = r + " " + (a >> 0) + "px " + s, String(t.text)
.split("\n").forEach((function(e, i) {
o.fillText(e, p(t, e), g(t, n, i))
}))
}))
})), null === (e = r.afterDraw) || void 0 === e || e.call(this, o)
}, o.prototype.carveOnGunwaleOfAMovingBoat = function() {
var t = this,
e = t._defaultConfig,
i = t.prizeFlag,
n = t.prizeDeg,
r = t.rotateDeg;
this.endTime = Date.now();
for (var o = this.stopDeg = r, a = e.speed, s = (Math.random() * n - n / 2) * this.getLength(e
.stopRange), h = 0, c = 0, l = 0; ++h;) {
var u = 360 * h - i * n - r - e.offsetDegree + s - n / 2,
f = L(this.FPS, o, u, e.decelerationTime) - o;
if (f > a) {
this.endDeg = a - c > f - a ? u : l;
break
}
l = u, c = f
}
}, o.prototype.play = function() {
var t, e;
0 === this.step && (this.startTime = Date.now(), this.prizeFlag = void 0, this.step = 1, null === (e = (
t = this.config).afterStart) || void 0 === e || e.call(t), this.run())
}, o.prototype.stop = function(t) {
if (0 !== this.step && 3 !== this.step) {
if (!t && 0 !== t) {
var e = this.prizes.map((function(t) {
return t.range
}));
t = u(e)
}
t < 0 ? (this.step = 0, this.prizeFlag = -1) : (this.step = 2, this.prizeFlag = t % this.prizes
.length)
}
}, o.prototype.run = function(t) {
var e;
void 0 === t && (t = 0);
var i = this,
n = i.rAF,
r = i.step,
o = i.prizeFlag,
a = i._defaultConfig,
s = a.accelerationTime,
h = a.decelerationTime,
c = a.speed;
if (0 !== r) {
if (-1 !== o) {
3 !== r || this.endDeg || this.carveOnGunwaleOfAMovingBoat();
var l = Date.now() - this.startTime,
u = Date.now() - this.endTime,
f = this.rotateDeg;
if (1 === r || l < s) {
this.FPS = l / t;
var d = A(l, 0, c, s);
d === c && (this.step = 2), f += d % 360
} else 2 === r ? (f += c % 360, void 0 !== o && o >= 0 && (this.step = 3, this.stopDeg = 0, this
.endDeg = 0)) : 3 === r ? (f = L(u, this.stopDeg, this.endDeg, h), u >= h && (this
.step = 0)) : this.stop(-1);
this.rotateDeg = f, this.draw(), n(this.run.bind(this, t + 1))
}
} else null === (e = this.endCallback) || void 0 === e || e.call(this, this.prizes.find((function(t,
e) {
return e === o
})) || {})
}, o.prototype.conversionAxis = function(t, e) {
var i = this.config;
return [t / i.dpr - this.Radius, e / i.dpr - this.Radius]
}, o
}(z),
W = function(t) {
function a(e, i) {
var n, r = t.call(this, e, {
width: i.width,
height: i.height
}) || this;
return r.rows = 3, r.cols = 3, r.blocks = [], r.prizes = [], r.buttons = [], r.defaultConfig = {}, r
.defaultStyle = {}, r.activeStyle = {}, r._defaultConfig = {}, r._defaultStyle = {}, r
._activeStyle = {}, r.cellWidth = 0, r.cellHeight = 0, r.startTime = 0, r.endTime = 0, r.currIndex = 0,
r.stopIndex = 0, r.endIndex = 0, r.demo = !1, r.timer = 0, r.FPS = 16.6, r.step = 0, r.prizeFlag = -1, r
.cells = [], r.ImageCache = new Map, r.initData(i), r.initWatch(), r.initComputed(), null === (n = e
.beforeCreate) || void 0 === n || n.call(r), r.init(), r
}
return e(a, t), a.prototype.resize = function() {
var e, i;
t.prototype.resize.call(this), this.draw(), null === (i = (e = this.config).afterResize) || void 0 ===
i || i.call(e)
}, a.prototype.initLucky = function() {
this.cellWidth = 0, this.cellHeight = 0, this.startTime = 0, this.endTime = 0, this.currIndex = 0, this
.stopIndex = 0, this.endIndex = 0, this.demo = !1, this.timer = 0, this.FPS = 16.6, this
.prizeFlag = -1, this.step = 0, t.prototype.initLucky.call(this)
}, a.prototype.initData = function(t) {
this.$set(this, "width", t.width), this.$set(this, "height", t.height), this.$set(this, "rows", Number(t
.rows) || 3), this.$set(this, "cols", Number(t.cols) || 3), this.$set(this, "blocks", t
.blocks || []), this.$set(this, "prizes", t.prizes || []), this.$set(this, "buttons", t
.buttons || []), this.$set(this, "button", t.button), this.$set(this, "defaultConfig", t
.defaultConfig || {}), this.$set(this, "defaultStyle", t.defaultStyle || {}), this.$set(this,
"activeStyle", t.activeStyle || {}), this.$set(this, "startCallback", t.start), this.$set(this,
"endCallback", t.end)
}, a.prototype.initComputed = function() {
var t = this;
this.$computed(this, "_defaultConfig", (function() {
var e = i({
gutter: 5,
speed: 20,
accelerationTime: 2500,
decelerationTime: 2500
}, t.defaultConfig);
return e.gutter = t.getLength(e.gutter), e.speed = e.speed / 40, e
})), this.$computed(this, "_defaultStyle", (function() {
return i({
borderRadius: 20,
fontColor: "#000",
fontSize: "18px",
fontStyle: "sans-serif",
fontWeight: "400",
background: "rgba(0,0,0,0)",
shadow: "",
wordWrap: !0,
lengthLimit: "90%"
}, t.defaultStyle)
})), this.$computed(this, "_activeStyle", (function() {
return i({
background: "#ffce98",
shadow: ""
}, t.activeStyle)
}))
}, a.prototype.initWatch = function() {
var t = this;
this.$watch("width", (function(e) {
t.data.width = e, t.resize()
})), this.$watch("height", (function(e) {
t.data.height = e, t.resize()
})), this.$watch("blocks", (function(e) {
t.initImageCache()
}), {
deep: !0
}), this.$watch("prizes", (function(e) {
t.initImageCache()
}), {
deep: !0
}), this.$watch("buttons", (function(e) {
t.initImageCache()
}), {
deep: !0
}), this.$watch("rows", (function() {
return t.init()
})), this.$watch("cols", (function() {
return t.init()
})), this.$watch("defaultConfig", (function() {
return t.draw()
}), {
deep: !0
}), this.$watch("defaultStyle", (function() {
return t.draw()
}), {
deep: !0
}), this.$watch("activeStyle", (function() {
return t.draw()
}), {
deep: !0
}), this.$watch("startCallback", (function() {
return t.init()
})), this.$watch("endCallback", (function() {
return t.init()
}))
}, a.prototype.init = function() {
var t, e;
return n(this, void 0, void 0, (function() {
var i;
return r(this, (function(n) {
switch (n.label) {
case 0:
return this.initLucky(), i = this.config, null === (t = i
.beforeInit) || void 0 === t || t.call(this), this
.draw(), [4, this.initImageCache()];
case 1:
return n.sent(), null === (e = i.afterInit) || void 0 === e || e
.call(this), [2]
}
}))
}))
}, a.prototype.initImageCache = function() {
var t = this;
return new Promise((function(e) {
var i = t.buttons.map((function(t) {
return t.imgs
}));
t.button && i.push(t.button.imgs);
var n = {
blocks: t.blocks.map((function(t) {
return t.imgs
})),
prizes: t.prizes.map((function(t) {
return t.imgs
})),
buttons: i
};
Object.keys(n).forEach((function(i) {
var r = n[i],
o = [];
r && r.forEach((function(e, n) {
e && e.forEach((function(e, r) {
o.push(t.loadAndCacheImg(i, n, r))
}))
})), Promise.all(o).then((function() {
t.draw(), e()
}))
}))
}))
}, a.prototype.handleClick = function(t) {
var e = this,
i = this.ctx;
o(o([], this.buttons), [this.button]).forEach((function(n) {
var r;
if (n) {
var o = e.getGeometricProperty([n.x, n.y, n.col || 1, n.row || 1]),
a = o[0],
s = o[1],
h = o[2],
c = o[3];
i.beginPath(), i.rect(a, s, h, c), i.isPointInPath(t.offsetX, t.offsetY) && 0 === e
.step && ("function" == typeof n.callback && n.callback.call(e, n), null === (
r = e.startCallback) || void 0 === r || r.call(e, t, n))
}
}))
}, a.prototype.loadAndCacheImg = function(t, e, i) {
return n(this, void 0, void 0, (function() {
var o = this;
return r(this, (function(a) {
return [2, new Promise((function(a, s) {
var h = o[t][e];
if ("buttons" === t && !o.buttons.length && o
.button && (h = o.button), h && h.imgs) {
var c = h.imgs[i];
if (c) {
var l = [o.loadImg(c.src, c), c.activeSrc &&
o.loadImg(c.activeSrc, c,
"$activeResolve")
];
Promise.all(l).then((function(t) {
var e = t[0],
i = t[1];
return n(o, void 0, void 0,
(function() {
var t;
return r(
this,
(function(
n
) {
switch (
n
.label
) {
case 0:
return "function" !=
typeof(
t =
c
.formatter
) ?
[3,
3] :
[4, Promise
.resolve(
t
.call(
this,
e
)
)
];
case 1:
return e =
n
.sent(),
i ?
[4, Promise
.resolve(
t
.call(
this,
i
)
)
] :
[3,
3];
case 2:
i = n
.sent(),
n
.label =
3;
case 3:
return this
.ImageCache
.set(
c
.src,
e
),
i &&
this
.ImageCache
.set(
c
.activeSrc,
i
),
a(),
[
2]
}
}))
}))
})).catch((function(n) {
console.error(t + "[" + e +
"].imgs[" + i +
"] " + n), s()
}))
}
}
}))]
}))
}))
}, a.prototype.draw = function() {
var t, e, i = this,
n = this,
r = n.config,
a = n.ctx,
u = n._defaultConfig,
d = n._defaultStyle,
p = n._activeStyle;
null === (t = r.beforeDraw) || void 0 === t || t.call(this, a), a.clearRect(0, 0, this.boxWidth, this
.boxHeight), this.cells = o(o([], this.prizes), this.buttons), this.button && this.cells.push(
this.button), this.cells.forEach((function(t) {
t.col = t.col || 1, t.row = t.row || 1
})), this.prizeArea = this.blocks.reduce((function(t, e, n) {
var r = t.x,
o = t.y,
s = t.w,
h = t.h,
u = l(e, i.getLength.bind(i)),
f = u[0],
d = u[1],
p = u[2],
g = u[3],
v = e.borderRadius ? i.getLength(e.borderRadius) : 0,
m = e.background;
return c(m) && (a.fillStyle = i.handleBackground(r, o, s, h, m), I(a, r, o, s, h, v), a
.fill()), e.imgs && e.imgs.forEach((function(t, e) {
var n = i.ImageCache.get(t.src);
if (n) {
var c = i.computedWidthAndHeight(n, t, s, h),
l = c[0],
u = c[1],
f = [i.getOffsetX(l, s) + i.getLength(t.left, s), i.getLength(t
.top, h)],
d = f[0],
p = f[1];
i.drawImage(a, n, r + d, o + p, l, u)
}
})), {
x: r + p,
y: o + f,
w: s - p - g,
h: h - f - d
}
}), {
x: 0,
y: 0,
w: this.boxWidth,
h: this.boxHeight
}), this.cellWidth = (this.prizeArea.w - u.gutter * (this.cols - 1)) / this.cols, this.cellHeight =
(this.prizeArea.h - u.gutter * (this.rows - 1)) / this.rows, this.cells.forEach((function(t, e) {
var n = i.getGeometricProperty([t.x, t.y, t.col, t.row]),
o = n[0],
l = n[1],
u = n[2],
g = n[3],
v = !1;
(void 0 === i.prizeFlag || i.prizeFlag > -1) && (v = e === i.currIndex % i.prizes
.length >> 0);
var m = v ? p.background : t.background || d.background;
if (c(m)) {
var w = (v ? p.shadow : t.shadow || d.shadow).replace(/px/g, "").split(",")[0]
.split(" ").map((function(t, e) {
return e < 3 ? Number(t) : t
}));
4 === w.length && (a.shadowColor = w[3], a.shadowOffsetX = w[0] * r.dpr, a
.shadowOffsetY = w[1] * r.dpr, a.shadowBlur = w[2], w[0] > 0 ? u -= w[0] : (
u += w[0], o -= w[0]), w[1] > 0 ? g -= w[1] : (g += w[1], l -= w[1])), a
.fillStyle = i.handleBackground(o, l, u, g, m);
var y = i.getLength(t.borderRadius ? t.borderRadius : d.borderRadius);
I(a, o, l, u, g, y), a.fill(), a.shadowColor = "rgba(0, 0, 0, 0)", a.shadowOffsetX =
0, a.shadowOffsetY = 0, a.shadowBlur = 0
}
e >= i.prizes.length && (e -= i.prizes.length), t.imgs && t.imgs.forEach((function(t,
e) {
var n = i.ImageCache.get(t.src),
r = i.ImageCache.get(t.activeSrc);
if (n) {
var s = v && r || n;
if (s) {
var h = i.computedWidthAndHeight(s, t, u, g),
c = h[0],
f = h[1],
d = [o + i.getOffsetX(c, u) + i.getLength(t.left, u), l + i
.getLength(t.top, g)
],
p = d[0],
m = d[1];
i.drawImage(a, s, p, m, c, f)
}
}
})), t.fonts && t.fonts.forEach((function(t) {
var e = v && p.fontStyle ? p.fontStyle : t.fontStyle || d.fontStyle,
n = v && p.fontWeight ? p.fontWeight : t.fontWeight || d.fontWeight,
r = v && p.fontSize ? i.getLength(p.fontSize) : i.getLength(t
.fontSize || d.fontSize),
c = v && p.lineHeight ? p.lineHeight : t.lineHeight || d
.lineHeight || t.fontSize || d.fontSize,
m = s(t, "wordWrap") ? t.wordWrap : d.wordWrap,
w = t.lengthLimit || d.lengthLimit,
y = t.lineClamp || d.lineClamp;
a.font = n + " " + (r >> 0) + "px " + e, a.fillStyle = v && p
.fontColor ? p.fontColor : t.fontColor || d.fontColor;
var b = [],
S = String(t.text);
if (m) {
var C = i.getLength(w, u);
b = f(a, h(S), (function() {
return C
}), y)
} else b = S.split("\n");
b.forEach((function(e, n) {
a.fillText(e, o + i.getOffsetX(a.measureText(e).width,
u) + i.getLength(t.left, u), l + i
.getLength(t.top, g) + (n + 1) * i.getLength(c))
}))
}))
})), null === (e = r.afterDraw) || void 0 === e || e.call(this, a)
}, a.prototype.handleBackground = function(t, e, i, n, r) {
var o = this.ctx;
return r.includes("linear-gradient") && (r = function(t, e, i, n, r, o) {
var a = /linear-gradient\((.+)\)/.exec(o)[1].split(",").map((function(t) {
return t.trim()
})),
s = a.shift(),
h = [0, 0, 0, 0];
if (s.includes("deg")) {
var c = function(t) {
return Math.tan(t / 180 * Math.PI)
};
(s = s.slice(0, -3) % 360) >= 0 && s < 45 ? h = [e, i + r, e + n, i + r - n * c(s -
0)] : s >= 45 && s < 90 ? h = [e, i + r, e + n - r * c(s - 45), i] : s >= 90 && s <
135 ? h = [e + n, i + r, e + n - r * c(s - 90), i] : s >= 135 && s < 180 ? h = [e +
n, i + r, e, i + n * c(s - 135)
] : s >= 180 && s < 225 ? h = [e + n, i, e, i + n * c(s - 180)] : s >= 225 && s <
270 ? h = [e + n, i, e + r * c(s - 225), i + r] : s >= 270 && s < 315 ? h = [e, i,
e + r * c(s - 270), i + r
] : s >= 315 && s < 360 && (h = [e, i, e + n, i + r - n * c(s - 315)])
} else s.includes("top") ? h = [e, i + r, e, i] : s.includes("bottom") ? h = [e, i, e, i +
r] : s.includes("left") ? h = [e + n, i, e, i] : s.includes("right") && (h = [e, i,
e + n, i
]);
var l = t.createLinearGradient.apply(t, h.map((function(t) {
return t >> 0
})));
return a.reduce((function(t, e, i) {
var n = e.split(" ");
return 1 === n.length ? t.addColorStop(i, n[0]) : 2 === n.length && t
.addColorStop.apply(t, n), t
}), l)
}(o, t, e, i, n, r)), r
}, a.prototype.carveOnGunwaleOfAMovingBoat = function() {
var t = this,
e = t._defaultConfig,
i = t.prizeFlag,
n = t.currIndex;
this.endTime = Date.now();
for (var r = this.stopIndex = n, o = e.speed, a = 0, s = 0, h = 0; ++a;) {
var c = this.prizes.length * a + i - r,
l = L(this.FPS, r, c, e.decelerationTime) - r;
if (l > o) {
this.endIndex = o - s > l - o ? c : h;
break
}
h = c, s = l
}
}, a.prototype.play = function() {
var t, e;
0 === this.step && (this.startTime = Date.now(), this.prizeFlag = void 0, this.step = 1, null === (e = (
t = this.config).afterStart) || void 0 === e || e.call(t), this.run())
}, a.prototype.stop = function(t) {
if (0 !== this.step && 3 !== this.step) {
if (!t && 0 !== t) {
var e = this.prizes.map((function(t) {
return t.range
}));
t = u(e)
}
t < 0 ? (this.step = 0, this.prizeFlag = -1) : (this.step = 2, this.prizeFlag = t % this.prizes
.length)
}
}, a.prototype.run = function(t) {
var e;
void 0 === t && (t = 0);
var i = this,
n = i.rAF,
r = i.step,
o = i.prizes,
a = i.prizeFlag,
s = i._defaultConfig,
h = s.accelerationTime,
c = s.decelerationTime,
l = s.speed;
if (0 !== r) {
if (-1 !== a) {
3 !== r || this.endIndex || this.carveOnGunwaleOfAMovingBoat();
var u = Date.now() - this.startTime,
f = Date.now() - this.endTime,
d = this.currIndex;
if (1 === r || u < h) {
this.FPS = u / t;
var p = A(u, .1, l - .1, h);
p === l && (this.step = 2), d += p % o.length
} else 2 === r ? (d += l % o.length, void 0 !== a && a >= 0 && (this.step = 3, this.stopIndex =
0, this.endIndex = 0)) : 3 === r ? (d = L(f, this.stopIndex, this.endIndex, c), f >=
c && (this.step = 0)) : this.stop(-1);
this.currIndex = d, this.draw(), n(this.run.bind(this, t + 1))
}
} else null === (e = this.endCallback) || void 0 === e || e.call(this, this.prizes.find((function(t,
e) {
return e === a
})) || {})
}, a.prototype.getGeometricProperty = function(t) {
var e = t[0],
i = t[1],
n = t[2],
r = void 0 === n ? 1 : n,
o = t[3],
a = void 0 === o ? 1 : o,
s = this.cellWidth,
h = this.cellHeight,
c = this._defaultConfig.gutter,
l = [this.prizeArea.x + (s + c) * e, this.prizeArea.y + (h + c) * i];
return r && a && l.push(s * r + c * (r - 1), h * a + c * (a - 1)), l
}, a.prototype.conversionAxis = function(t, e) {
var i = this.config;
return [t / i.dpr, e / i.dpr]
}, a
}(z),
_ = function(t) {
function o(e, i) {
var n, r = t.call(this, e, {
width: i.width,
height: i.height
}) || this;
return r.blocks = [], r.prizes = [], r.slots = [], r.defaultConfig = {}, r._defaultConfig = {}, r
.defaultStyle = {}, r._defaultStyle = {}, r.endCallback = function() {}, r.cellWidth = 0, r.cellHeight =
0, r.cellAndSpacing = 0, r.widthAndSpacing = 0, r.heightAndSpacing = 0, r.FPS = 16.6, r.scroll = [], r
.stopScroll = [], r.endScroll = [], r.startTime = 0, r.endTime = 0, r.step = 0, r.prizeFlag = void 0, r
.ImageCache = new Map, r.initData(i), r.initWatch(), r.initComputed(), null === (n = e.beforeCreate) ||
void 0 === n || n.call(r), r.init(), r
}
re