UNPKG

lucky-canvas-z

Version:

一个基于原生 js 的(大转盘 / 九宫格 / 老虎机)抽奖插件

131 lines (130 loc) 3.38 kB
import Lucky from './lucky'; import { UserConfigType } from '../types/index'; import LuckyGridConfig from '../types/grid'; export default class LuckyGrid extends Lucky { private rows; private cols; private blocks; private prizes; private buttons; private button?; private defaultConfig; private defaultStyle; private activeStyle; private _defaultConfig; private _defaultStyle; private _activeStyle; private startCallback?; private endCallback?; private cellWidth; private cellHeight; private startTime; private endTime; private currIndex; private stopIndex; private endIndex; private demo; private timer; private FPS; /** * 游戏当前的阶段 * step = 0 时, 游戏尚未开始 * step = 1 时, 此时处于加速阶段 * step = 2 时, 此时处于匀速阶段 * step = 3 时, 此时处于减速阶段 */ private step; /** * 中奖索引 * prizeFlag = undefined 时, 处于开始抽奖阶段, 正常旋转 * prizeFlag >= 0 时, 说明stop方法被调用, 并且传入了中奖索引 * prizeFlag === -1 时, 说明stop方法被调用, 并且传入了负值, 本次抽奖无效 */ private prizeFlag; private cells; private prizeArea; private ImageCache; /** * 九宫格构造器 * @param config 配置项 * @param data 抽奖数据 */ constructor(config: UserConfigType, data: LuckyGridConfig); protected resize(): void; protected initLucky(): void; /** * 初始化数据 * @param data */ private initData; /** * 初始化属性计算 */ private initComputed; /** * 初始化观察者 */ private initWatch; /** * 初始化 canvas 抽奖 */ init(): Promise<void>; private initImageCache; /** * canvas点击事件 * @param e 事件参数 */ protected handleClick(e: MouseEvent): void; /** * 根据索引单独加载指定图片并缓存 * @param cellName 模块名称 * @param cellIndex 模块索引 * @param imgName 模块对应的图片缓存 * @param imgIndex 图片索引 */ private loadAndCacheImg; /** * 绘制九宫格抽奖 */ protected draw(): void; /** * 处理背景色 * @param x * @param y * @param width * @param height * @param background * @param isActive */ private handleBackground; /** * 刻舟求剑 */ private carveOnGunwaleOfAMovingBoat; /** * 对外暴露: 开始抽奖方法 */ play(): void; /** * 对外暴露: 缓慢停止方法 * @param index 中奖索引 */ stop(index?: number): void; /** * 实际开始执行方法 * @param num 记录帧动画执行多少次 */ private run; /** * 计算奖品格子的几何属性 * @param { array } [...矩阵坐标, col, row] * @return { array } [...真实坐标, width, height] */ private getGeometricProperty; /** * 换算渲染坐标 * @param x * @param y */ protected conversionAxis(x: number, y: number): [number, number]; }