PHP + AJAX实现幸运转盘抽奖

来源:互联网 发布:oppoa77t怎么切换网络 编辑:程序博客网 时间:2024/06/06 15:03

后端index.PHP文件:

[php]
<?php  
  1.   
  2. /** 
  3.  *  
  4.  * php + ajax 幸运大转盘 
  5.  * @author Sim <326196998@qq.com> 
  6.  * @time 2014年9月25日15:37:32 
  7.  * @url http://www.yiifcms.com/post/59/ 
  8.  *  
  9.  */  
  10.   
  11. //奖项初始化  
  12. $prize_arr = array(  
  13.         '0' => array('id'=>1,'min'=>1,'max'=>29,'prize'=>'一等奖','v'=>1),  
  14.         '1' => array('id'=>2,'min'=>302,'max'=>328,'prize'=>'二等奖','v'=>2),  
  15.         '2' => array('id'=>3,'min'=>242,'max'=>268,'prize'=>'三等奖','v'=>5),  
  16.         '3' => array('id'=>4,'min'=>182,'max'=>208,'prize'=>'四等奖','v'=>7),  
  17.         '4' => array('id'=>5,'min'=>122,'max'=>148,'prize'=>'五等奖','v'=>10),  
  18.         '5' => array('id'=>6,'min'=>62,'max'=>88,'prize'=>'六等奖','v'=>25),  
  19.         '6' => array('id'=>7,'min'=>array(32,92,152,212,272,332),  
  20.                 'max'=>array(58,118,178,238,298,358),'prize'=>'七等奖','v'=>50)  
  21. );  
  22.   
  23. //抽奖开始  
  24. foreach ($prize_arr as $key => $val) {  
  25.     $arr[$val['id']] = $val['v'];  
  26. }  
  27.   
  28. $rid = getRand($arr); //根据概率获取奖项id  
  29.   
  30. $res = $prize_arr[$rid-1]; //中奖项  
  31. $min = $res['min'];  
  32. $max = $res['max'];  
  33. if($res['id']==7){ //七等奖  
  34.     $i = mt_rand(0,5);  
  35.     $result['angle'] = mt_rand($min[$i],$max[$i]);  
  36. }else{  
  37.     $result['angle'] = mt_rand($min,$max); //随机生成一个角度  
  38. }  
  39. $result['prize'] = $res['prize'];  
  40.   
  41. echo json_encode($result);  
  42.   
  43. /** 
  44.  * 根据概率获取奖项 
  45.  * @param unknown $proArr 
  46.  * @return Ambigous <string, unknown> 
  47.  */  
  48. function getRand($proArr) {  
  49.     $result = '';  
  50.   
  51.     //概率数组的总概率精度  
  52.     $proSum = array_sum($proArr);  
  53.   
  54.     //概率数组循环  
  55.     foreach ($proArr as $key => $proCur) {  
  56.         $randNum = mt_rand(1, $proSum);  
  57.         if ($randNum <= $proCur) {  
  58.             $result = $key;  
  59.             break;  
  60.         } else {  
  61.             $proSum -= $proCur;  
  62.         }  
  63.     }  
  64.     unset ($proArr);  
  65.   
  66.     return $result;  
  67. }  


前端index.html文件:

[html] view plain copy print?
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  5. <title>幸运大转盘  - PHP+AJAX实现</title>  
  6. <style type="text/css">  
  7.   
  8. .demo { height: 417px; margin: 50px auto; position: relative; width: 417px;}  
  9. #disk { background: url("disk.jpg") no-repeat; height: 417px; width: 417px;}  
  10. #start { height: 320px; left: 130px; position: absolute; top: 46px; width: 163px;}  
  11.   
  12. </style>  
  13.   
  14. <script type="text/javascript" src="jquery-1.8.3.js"></script>  
  15. <script type="text/javascript" src="jQueryRotate.2.2.js"></script>  
  16. <script type="text/javascript">  
  17. $(function(){   
  18.     $("#startbtn").click(function(){   
  19.        lottery();   
  20.    });   
  21. });   
  22. function lottery(){   
  23.    $.ajax({   
  24.        type: 'POST',   
  25.        url: 'index.php',   
  26.        dataType: 'json',   
  27.        cache: false,   
  28.        error: function(){   
  29.            alert('出错了!');   
  30.            return false;   
  31.        },   
  32.        success:function(json){   
  33.            $("#startbtn").unbind('click').css("cursor","default");   
  34.            var a = json.angle; //角度   
  35.            var p = json.prize; //奖项   
  36.            $("#startbtn").rotate({   
  37.                duration:3000, //转动时间   
  38.                angle: 0,   
  39.                animateTo:1800+a, //转动角度   
  40.                easing: $.easing.easeOutSine,   
  41.                callback: function(){   
  42.                    var con = confirm('恭喜你,中得'+p+'\n还要再来一次吗?');   
  43.                    if(con){   
  44.                        lottery();   
  45.                    }else{   
  46.                        //再次绑定click事件  
  47.                        $("#startbtn").css("cursor","pointer").live("click",function(){                           
  48.                            lottery();   
  49.                        });                      
  50.                        return false;   
  51.                    }   
  52.                }   
  53.            });   
  54.        }   
  55.    });   
  56. }   
  57. </script>  
  58. </head>  
  59. <body>  
  60.   
  61.     <div class="demo">  
  62.         <div id="disk"></div>  
  63.         <div id="start"><img id="startbtn" src="start.png" style="cursor: pointer; transform: rotate(0deg);"></div>  
  64.    </div>  
  65.      
  66. </body>  
  67. </html>  




原创粉丝点击