原文  https://www.helloweba.com/view-blog-215.html

准备工作

首先要准备素材,抽奖的界面用到两张图片,圆盘图片和指针图片,实际应用中可以根据不同的需求制作不同的圆盘图片。

接着制作html页面,实例中我们在body中加入如下代码:

<div class="demo">     <div id="disk"></div>     <div id="start"><img src="start.png" id="startbtn"></div> </div> 

我们用#disk来放置圆盘背景图片,在css中控制,用#start来放置指针图片start.png。

然后我们使用CSS来控制指针和圆盘的位置,代码如下:

.demo{width:417px; height:417px; position:relative; margin:50px auto} #disk{width:417px; height:417px; background:url(disk.jpg) no-repeat} #start{width:163px; height:320px; position:absolute; top:46px; left:130px;} #start img{cursor:pointer} 

jQuery

要想让指针转动起来,如果不借助flash的话,我们可以使用html5的canvas实现图片的旋转,但是需要考虑浏览器兼容性,而一款jQuery插件完全可以实现图片(任意html元素)旋转并兼容各大浏览器,它就是jQueryRotate.js。

使用jQueryRotate.js可以将图片旋转任意角度,可以绑定鼠标事件,可以设置旋转过程动画效果以及callback回调函数。

使用方法当然是先在head中载入jquery库文件以及jQueryRotate.js,然后我们使用以下代码就可以实现指针转动了。

$(function(){     $("#startbtn").rotate({         bind:{             click:function(){//绑定click单击事件                  var a = Math.floor(Math.random() * 360); //生成随机数                  $(this).rotate({                          duration:3000,//转动时间间隔(转动速度)                          angle: 0,  //开始角度                         animateTo:3600+a, //转动角度,10圈+                         easing: $.easing.easeOutSine, //动画扩展                         callback: function(){ //回调函数                             alert('中奖了!');                         }                  });             }         }     }); }); 

上面的代码实现了:当单击指针“开始抽奖”按钮,指针开始转动,转动角度为3600+a,即10圈后再转动随机产生的a角度,当转动角度到达3600+a度时停止转动。

需要注意的是,easing:动画扩展我们需要结合动画扩展插件才能实现。关于easing插件在这篇文章中有介绍:jQuery Easing 动画效果扩展

本文到此已完成了转盘转动指针的过程,但是需要结合抽奖控制才算一个完整的抽奖程序,我们在下篇文章中将介绍使用PHP来控制抽奖几率,以及如何应用jQuery与PHP完成抽奖的交互过程,敬请关注。

PHP

首先,我们根据抽奖圆盘上的奖项设置对应角度和中奖几率,我们在data.php中构建一个多维数组:

$prize_arr = array(     '0' => array('id'=>1,'min'=>1,'max'=>29,'prize'=>'一等奖','v'=>1),     '1' => array('id'=>2,'min'=>302,'max'=>328,'prize'=>'二等奖','v'=>2),     '2' => array('id'=>3,'min'=>242,'max'=>268,'prize'=>'三等奖','v'=>5),     '3' => array('id'=>4,'min'=>182,'max'=>208,'prize'=>'四等奖','v'=>7),     '4' => array('id'=>5,'min'=>122,'max'=>148,'prize'=>'五等奖','v'=>10),     '5' => array('id'=>6,'min'=>62,'max'=>88,'prize'=>'六等奖','v'=>25),     '6' => array('id'=>7,'min'=>array(32,92,152,212,272,332), 'max'=>array(58,118,178,238,298,358),'prize'=>'七等奖','v'=>50) ); 

数组$prize_arr,id用来标识不同的奖项,min表示圆盘中各奖项区间对应的最小角度,max表示最大角度,如一等奖对应的最小角度:0,最大角度30,这里我们设置max值为1、max值为29,是为了避免抽奖后指针指向两个相邻奖项的中线。由于圆盘中设置了多个七等奖,所以我们在数组中设置每个七等奖对应的角度范围。prize表示奖项内容,v表示中奖几率,我们会发现,数组中七个奖项的v的总和为100,如果v的值为1,则代表中奖几率为1%,依此类推。

关于中奖概率算法,本站文章:PHP+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; } 

函数getRand()会根据数组中设置的几率计算出符合条件的id,我们可以接着调用getRand()。

foreach ($prize_arr as $key => $val) {     $arr[$val['id']] = $val['v']; } 

$rid = getRand($arr); //根据概率获取奖项id 

$res = $prize_arr[$rid-1]; //中奖项 $min = $res['min']; $max = $res['max']; if($res['id']==7){ //七等奖     $i = mt_rand(0,5);     $result['angle'] = mt_rand($min[$i],$max[$i]); }else{     $result['angle'] = mt_rand($min,$max); //随机生成一个角度 } $result['prize'] = $res['prize']; 

echo json_encode($result); 

代码中,我们调用getRand(),获得通过概率运算后得到的奖项,然后根据奖项中配置的角度范围,在最小角度和最大角度间生成一个角度值,并构建数组,包含角度angle和奖项prize,最终以json格式输出。

jQuery

在上文的基础上,我们对前端jQuery代码进行改造,当点击“开始抽奖”按钮后,向后台data.php发送一个ajax请求,如果请求成功并返回奖项信息,则转动指针,将指针最终指向位置转动到data.php返回的角度值。

$(function(){      $("#startbtn").click(function(){         lottery();     }); }); function lottery(){     $.ajax({         type: 'POST',         url: 'data.php',         dataType: 'json',         cache: false,         error: function(){             alert('出错了!');             return false;         },         success:function(json){             $("#startbtn").unbind('click').css("cursor","default");             var a = json.angle; //角度             var p = json.prize; //奖项             $("#startbtn").rotate({                 duration:3000, //转动时间                 angle: 0,                 animateTo:1800+a, //转动角度                 easing: $.easing.easeOutSine,                 callback: function(){                     var con = confirm('恭喜你,中得'+p+'\n还要再来一次吗?');                     if(con){                         lottery();                     }else{                         return false;                     }                 }             });         }     }); } 

我们构建自定义函数lottery(),在lottery()我们向data.php发送一个POST请求,如果成功返回中奖信息后,调用rotate插件开始转动,转动角度由后台返回的角度决定,这里我们用1800+a表示转动的角度,即指针转动6圈+a度后停止,然后我们在单击“开始抽奖”按钮时调用lottery(),于是转盘抽奖就完成。

转载于:https://www.cnblogs.com/liuzhaobo1999/p/7440164.html

幸运大转盘-jQuery+PHP实现的抽奖程序相关推荐

  1. php幸运大抽奖,幸运大转盘-jQuery+PHP实现的抽奖程序-完善中

    小雨在线网站自营销研究之幸运大转盘-jQuery+PHP实现的抽奖程序-完善中 1.[代码][PHP]代码 小雨在线网站自营销研究 $(function () { $("#startbtn& ...

  2. php mysql随机抽奖源码_幸运大转盘-jQuery+PHP实现的抽奖程序

    目前好多网站上应用的转盘抽奖程序大多是基于flash的,而本文结合实例将使用jQuery和PHP来实现转盘抽奖程序,为了便于理解,作者分两部分来讲解,本文讲解第一部分,侧重使用jQuery实现转盘的转 ...

  3. 幸运大转盘-jQuery+Java实现的抽奖程序

     第一次写博客,要喷请轻喷,呵呵. 昨天项目用到一个在微信上实现的抽奖程序,在网上找了一个jQuery+PHP的例子,因为不会php,花了好大力气才将就搞成了Java版的.原文地址:http:// ...

  4. PHP做大转盘抽奖的思路,jQuery实现幸运大转盘(php抽奖程序)抽奖程序

    抽奖程序有各式各样的形式,其中幸运大转盘最为常见.线上线下都有很多的使用场景. 本文结合我自己的php网站,是实现一个php抽奖程序. 下图是该抽奖程序的截图: 一般的抽奖程序主要是算法程序,界面效果 ...

  5. php大转盘程序,jQuery幸运大转盘_jQuery+PHP抽奖程序(下)

    上一篇讲解了幸运大转盘前端,而本文继续讲下半部分:PHP控制抽奖几率并最终实现转盘抽奖. 下载资源 下载积分: 95 积分 PHP 首先,在ajax.php中创建一个奖项对应角度和中奖几率二维数组: ...

  6. 微信小程序项目实例——幸运大转盘

    微信小程序项目实例--幸运大转盘 文章目录 微信小程序项目实例--幸运大转盘 一.项目展示 二.抽奖页 三.领奖页 文末:项目代码 项目代码见文字底部,点赞关注有惊喜 一.项目展示 幸运大转盘是一个简 ...

  7. js框架jquery实现的幸运大转盘抽奖程序代码,兼容多种浏览器(Internet Explorer 6.0+ 、Firefox 2.0 、Safari 3 、Opera 9 、Chrome)

    博客目录 js框架jquery实现的幸运大转盘抽奖程序代码 实现功能截图 系统功能 使用技术 代码 写在最后 js框架jquery实现的幸运大转盘抽奖程序代码 本系统实现了一个幸运转盘抽奖,兼容多种浏 ...

  8. js框架jquery实现幸运大转盘抽奖程序代码,兼容多种浏览器

    原文:js框架jquery实现幸运大转盘抽奖程序代码,兼容多种浏览器 源代码下载地址:http://www.zuidaima.com/share/1779633798073344.htm 看到网页上有 ...

  9. Jquery写的幸运大转盘抽奖实例,用asp.net处理的服务器逻辑,附源码下载

    [实例简介] 该幸运大转盘抽奖实例已实现服务器端的业务逻辑代码,稍加改动就可以应用实际了 文件:590m.com/f/25127180-488779229-66bbf7(访问密码:551685) [实 ...

最新文章

  1. UA MATH571B 试验设计III 单因素试验设计1
  2. 【日期、时间】javascript字符串转日期类型
  3. list agg cause ORA-06502 PL/SQL: numeric or value error
  4. java添加信息_java – 向异常添加信息
  5. hdu Candy Sharing Game
  6. 控制工程实践(2)——拉普拉斯变换及传递函数(之拉氏变换)
  7. Tupper自我指涉公式生成器
  8. 光敏二极管的工作原理
  9. (啤酒,红酒,白酒,料酒)豆瓣(剁椒)鲫鱼做法记录
  10. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增消息管理
  11. ios备忘录下载安卓版_如何下载和平精英国际服?
  12. 微信公共平台 “token验证失败”的一个原因
  13. 极限测试4 - 系统能创建的最大tcp连接数
  14. 工控机的日常维护方法及步骤
  15. 【多传感融合】优达学城多传感融合学习笔记(二)——将激光雷达点云俯视图映射到二维图像
  16. SAP 携合作伙伴建立「工业4.0开放联盟」
  17. 8Manage:房地产企业使用电子招采平台的好处
  18. 拓嘉辰丰电商:如何用SWOT来分析店铺发展
  19. 中国氢能汽车商业化之路,还要开多远?
  20. 前技嘉联合执行副总江国祥跳槽富士康

热门文章

  1. 15 款免费好用的 Mac App
  2. 小白学习Flink系列--第二篇-01(流式数据概念)
  3. 区块链构架就是造房子!10分钟带你走遍构建全程
  4. kindle pc无法连接服务器解决办法
  5. VFP6.0项目编写完之后如何生成安装程序?
  6. a标签嵌套图片使用方法
  7. 深化生态合作,博睿数据APM正式上架华为云严选商城
  8. 开源自主导航小车MickX4(九)基于move_base 的自主导航框架
  9. 【检测技术】之热电偶测温
  10. 2022世界燕窝展|上海滋补品展|海参展谈天冷了,滋补文案怎么写?