转盘抽奖(主要:概率和JQ)

转盘抽奖

涉及的重点:JQ特效,概率

逻辑设计:
1.把前端页面设计好,转盘可以用table标签做,样式设计好
2.控制器把抽奖物查询出来,有序输出到前端页面设计好的转盘上
3.写JQ特效,原理就是轮流给每个抽奖项添加特定样式,实现看起来转盘转动的效果
4.抽奖,Ajax调用控制器的方法,该方法有三步:
    1.查询出抽奖物(2步骤类似)
    2.调用概率方法
    3.把调用概率选中的抽奖物返回给前端页面Ajax
5.成功:根据返回的抽奖物设定的位置,让转盘最后转到返回的抽奖物位置;失败:提示“请求失败”

有个问题:用户如何快速点击抽奖按钮,会多次触发点击事件,使转盘连续转动多次。我想实现的效果是无论用户点击多少次,等转盘转完后(整个流程完整一轮)再执行下一次点击事件,再转动起来。我运用了弹框停顿阻止一下,但如果快速连续点击还是会执行多次点击事件,请有经验的大佬指导一下,谢谢!!

重点部分代码:
1.概率方法get_rand():

//抽奖概率运算
function get_rand($proArr) {   
    $result = array();
    foreach ($proArr as $key => $val) { 
        $arr[$key] = $val['v']; //概率
    }
    //概率存在百分百时
    if(in_array(100, $arr)){
       foreach($arr as $key => $value){
            if($value == 100){
                $data[] = $key;
            }
        }
        shuffle($data);//打乱数组
        $ke = $data[0];//获取第一次值
        return $proArr[$ke];
    }
    // 概率数组的总概率  
    $proSum = array_sum($arr);        
    asort($arr);
    // 概率数组循环   
    foreach ($arr as $k => $v) {   
        $randNum = mt_rand(1, $proSum);   
        if ($randNum <= $v) {   
            $result = $proArr[$k];   
            break;   
        } else {   
            $proSum -= $v;   
        }         
    }     
    return $result;   
}

2.转盘转动抽奖JQ
类似类里调用方法(定义一个变量lottery,里面有变量的初始化和方法,可以运用lottery.方法,实现调用)。layer是弹框插件,需要有layer插件包才有效果
注意:JQ运行时不用等方法调回结果再往下执行

你可能感兴趣的:(JQ,PHP,TP,运算)