lucky-canvas-z
Version:
一个基于原生 js 的(大转盘 / 九宫格 / 老虎机)抽奖插件
131 lines (130 loc) • 3.38 kB
TypeScript
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];
}