转盘抽奖,炫丽的一般是flash做的。不懂flash而又不需要那么炫丽,可以简单的通过jquery来实现。网上教程有很多,跟着做了一下,也贴出来吧。要实现转盘抽奖,有两个关键点,一是让转盘或指针转起来并控制停止角度,一是概率控制。
对于转起来控制停止角度这个问题,网上各教程都是用的jqueryrotate这个jquery插件,兼容性好使用也简单,要我本人自己写也不知道怎么写好,还是拿来即可。对于概率控制,网上也一致的是这个经典算法:
function getRand($proArr) {
$result = '';
//概率数组的总概率精度
$proSum = array_sum($proArr);
//概率数组循环
foreach ($proArr as $key => $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum <= $proCur) {
$result = $key;
break;
} else {
$proSum -= $proCur;
}
}
unset ($proArr);
return $result;
}
这里参数是一个概率数组,某一项的出现的概率是其概率精度/总概率精度。比如概率数组是array(‘1’=>’40’,’2’=>’60’),那么‘1’这一项出现的概率就是40/(40+60)。为什么是这个结果呢,好吧,简单的概率计算:
php经典概率算法解析
(原谅我为了输这分数,还去百度了一下,囧…)
对于概率数组的来源,实际应用中应该是从数据库里面取,这样方便做各种业务判断,比如某一奖项的概率除了人工干预还根据抽中次数自动变化。我这里为了显示,就写到一个数组里面,而且这找的转盘素材同一奖项还有多处出现,故用这样一个数组来存储(这里根据实际业务而定,不是重点)。
//奖项数据
$prize_arr=array(
'youpan'=>array('angle'=>array('16-40','196-220'),'prize'=>'U盘1个','v'=>10),
'money_2000'=>array('angle'=>array('46-74',&#