转盘抽奖组件

一.组件名称

转盘抽奖

二.组件功能

根据奖品(谢谢参与视为一种特殊的奖品)的中奖率,随机出现中奖结果

三.具体实现

~为了使组件具有高可定制化的特点,将如下属性作为组件接收的属性

1.background: 包含所有奖品的转盘图片

2.direction: 转盘转动的方向

3.turnNum: 每次抽奖转盘转动的次数

4.time: 每次抽奖转盘转动的时间

5.prizeList: 全部奖品数据(包括非奖品)

6.getPrize: 每种奖品对应的中间率

7.allowGetTimes: 允许抽奖的次数

~实现按照中奖率随机抽出奖品的核心是加权平均数算法,想了解加权平均数算法,可以参考:https://www.cnblogs.com/youyouly/p/13946742.html

下面开始分析具体实现步骤:

1.计算每个奖品所占角度

首先转盘指针指在第一个奖品的正中间,每个奖品所占的角度是相等的,假设有n个奖品(此是概称,包括中奖情况和未中奖情况),则每个奖品所占的角度为 base = 360 / n,根据加权平均数算法,若所抽出的奖品是第i(i = 0, 1, 2 ... n - 1)个,则转盘指针应该转动角度为 i * base;

2.计算每个奖品所占的权重

如果想让中奖率精确到小数点后2位,则每个奖品的权重 = 对应的中奖率 * 100,类似地,如果想让中奖率精确到小数点后4位,则每个奖品的权重 = 对应的中奖率 * 10000,我在组件里中奖率精确到小数点后2位,所以乘了10000;

3.根据加权平均数算法求出所抽奖品,将转盘转动相应角度。

四.源码:https://github.com/lvyou-ly/wheel-surf

posted @ 2020-11-09 02:20  youyouly  阅读(249)  评论(0)    收藏  举报