近日由于工作的需要,开发了大转盘抽奖的模块!起初自己也显得比较没有头绪,于是上网找了些资料,但是发现都没有很好的解决自己的问题,于是乎只能参考网上的一些资料,自己去做了!这里跟大家分享下大转盘的功能滴开发~
一些东东完全是按照自己的理解和设计去走的,能力有限,请见谅
1.首先得确定你的奖项有多少个,你也可以开发设置成手动在后台配置的。当然我就是这么做的~
2.其实确定中奖概率,说实话自己到目前为止也没有想到一个能够很好的确定各个奖项的中奖概率的问题,如果有朋友有好的想法和算法,可以一起探讨下!
确定好以上步骤之后,就可以慢慢的开始开发了:
1)使用jquery.easing的js库的动画效果;再使用jqueryrotate插件库进行旋转抽奖处理
引入脚本库:
<script type="text/javascript" src="<%=path %>/files/jquery.min.js"></script>
<script type="text/javascript" src="<%=path %>/files/jQueryRotate.2.2.js"></script>
<script type="text/javascript" src="<%=path %>/files/jquery.easing.min.js"></script>
<script type="text/javascript" src="<%=path %>/js_customer/award.js"></script>
页面代码:
<div id="outercont" >
<div id="outer-cont" style="overflow:hidden;">
<div id="outer"><img src="<%=path %>/files/activity-lottery-1.png" width="310px"></div>
</div>
<div id="inner-cont">
<div id="inner"><img src="<%=path %>/files/activity-lottery-2.png"></div>
</div>
</div>
Award.JS代码:
$(function(){
$("#inner").click(function(){
lottery();
});
});
function lottery(){
var weChatName = $("#weChatName").val();
$.ajax({
type: 'POST',
url: '/for_free/awardcomprehensive',
data:"weChatName="+weChatName+ "&r="
+ Math.random(),
error: function(){
alert('出错了!');
return false;
},
success:function(json){
var data = eval('(' + json + ')');
$("#inner").unbind('click').css("cursor","default");
//var a = parseInt(json.angle); //角度
var a = parseInt(data.angle); //角度
var p = data.prize; //奖项
var msg = data.msg; //提示信息
$("#outer").rotate({ //inner内部指针转动,outer,外部转盘转动
duration:5000, //转动时间
angle: 0, //开始角度
animateTo:3600+a, //转动角度
easing: $.easing.easeOutSine, //动画扩展
callback: function(){
alert(msg);
}
});
}
});
}
注意rotate方法中的几个参数,angle是开始的角度,而animateto表示旋转的角度,后面的a就是从后台传入的角度。Easing则用到了引入的另外一个js库中的效果
2)奖项的设置
这里把所有的信息都设置为奖项,这样可以更加方便进行计算
Id就是指奖项的ID
Startangle就是开始的角度,
Endangle就是指结束的角度。
Awardchance是指奖项的总数
此处的开始角度和结束角度需要按照奖项和转盘的实际角度数字来进行分割。自己在这里做的不是很好,还要进行微调~
3)把这些奖项都获取出来放到一个map中,key值为id,value值为奖项这个domain类
AwardPrizeBiz biz = new AwardPrizeBizImpl();
Map<Integer, AwardPrize> award_maps = biz.getAllAwawrdPrize2Map();
WinedPrizeBiz biz2 = new WinedPrizeBizImpl();
AwardPrize result = null;
WinedPrize prize = null;
try {
while (true) {
int randomNum = new Random().nextInt(award_maps.size());
if (award_maps.containsKey(randomNum)) {//中奖
result = award_maps.get(randomNum);//所中的奖项
Integer wined_count = biz2.getAllWinedPrize(randomNum)
.size();//已经被抽中的奖品
int tem_count = award_maps.get(randomNum).getAwardChance()
- wined_count - 1;//判断奖品数量是否足够
if (tem_count < 0) {
continue;
} else {
prize = new WinedPrize();
prize.setAwardId(String.valueOf(result.getAwardId()));
prize.setAwardMsg(result.getAwardMsg());
prize.setCustTel(telephone);
prize.setOrder_verify(verify);
prize.setWpDate(SimpleDateUtil.getFormatDateTime(new Date()));
prize.setWpSate("0");
prize.setWpUUID(CheckcodeUtil.getVerify_code());
biz2.winAwardPrize(prize);
break;
}
} else {
continue;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
抽奖过程中产生一个map集合长度之内的随机数,然后比较ID,如果符合则判断为中奖,另外,比较已经中奖的数量,判断是否还有足够的剩余数量,如果没有则继续产生随机数,如果有,则中奖;返回中奖信息
4)构造反馈给页面的中奖信息
response.setContentType("text/html;charset=GBK");
PrintWriter out = response.getWriter();
StringBuffer bf = new StringBuffer();
HttpSession session = request.getSession(true);
String telephone = (String) session.getAttribute("telephone");
String verify = (String) session.getAttribute("verify");
AwardWebBiz biz = new AwardWebBiz();
ApplyOrder order = biz.validateInvitation(telephone, verify);
if (order != null) {
boolean flag = biz.chargeInvitation(telephone, verify);
if (flag) {
try {
if (verify != null && !"".equals(verify)) {
Object obj[] = biz.returnWined2Customer(verify,
telephone);// 抽奖后返回角度和奖品等级
bf.append("{success:true");
bf.append(",");
bf.append("angle:" + obj[0]);
bf.append(",");
bf.append("prize:" + obj[1]);
bf.append(",");
bf.append("msg:'" + obj[2] + "'}");
// 判断是否属于中奖可兑奖范围
if (obj[2].equals("一等奖") || obj[2].equals("二等奖")
|| obj[2].equals("三等奖")) {
SendMessageUtil.sendMsg(telephone, MessageUtil
.sendWinAwardMsg2Customer(biz
.getWinedPrize(verify, telephone)));
}
} else {
bf.append("{success:false");
bf.append(",");
bf.append("msg:'请填写验证码'}");
}
SendMessageUtil.sendMsg(order.getCustomerTel(), MessageUtil
.sendExpire2Customer(order));
} catch (Exception e) {
e.printStackTrace();
}
} else {
bf.append("{success:false");
bf.append(",");
bf.append("msg:'出问题了,请联系系统管理员!'}");
}
}else{
bf.append("{success:false");
bf.append(",");
bf.append("msg:'验证失效!'}");
}
out.print(bf.toString());
out.flush();
out.close();
其中json中的angle就是页面需要的旋转角度参数。这样就可以看到转盘旋转的效果了,然后页面提示的中奖信息也是后台传入的中奖信息!
自己在设计的过程中,角度把握还得微调,还有就是中奖概率的问题,希望有高手可以指点下~谢谢!

- 大小: 16.9 KB

- 大小: 90.9 KB
分享到:
相关推荐
在IT行业中,大转盘功能通常用于开发互动式的抽奖或者游戏应用,常见于电商、娱乐等领域的App或网站。Taro 是一个开源的多端开发框架,它支持编写一次代码,然后可以编译到微信小程序、H5、React Native等多个平台。...
在本项目中,我们关注的是一个特定的功能——“仿天猫超市抽奖大转盘”。这个功能是电商平台上常见的营销手段,用于吸引用户参与并增加用户粘性。 首先,我们要了解微信小程序开发的基本知识。它基于 JavaScript、...
微信小程序精品demo:大转盘,仿天猫超市抽奖(源代码+截图)微信小程序精品demo:大转盘,仿天猫超市抽奖(源代码+截图)微信小程序精品demo:大转盘,仿天猫超市抽奖(源代码+截图)微信小程序精品demo:大转盘,仿...
HTML5微抽奖大转盘JS特效是一种常见的互动营销工具,尤其在微信和其他社交媒体平台上非常流行。这个技术结合了HTML5、CSS3和JavaScript(特别是jQuery库)的力量,为用户提供了一个直观且吸引人的抽奖体验。接下来,...
请在微信后台查找id为OPENTM202243318的模版消息,添加至公众号,取得模版消息id如:Idqes1taa1oBx4tKadmQsPUD1KVmj4RfHo_gkMydK9M 填到模块设置 的模版消息中即可,不填则不会发送模版消息。 更新微信支付证书以...
微信小程序 大转盘 (源码)微信小程序 大转盘 (源码)微信小程序 大转盘 (源码)微信小程序 大转盘 (源码)微信小程序 大转盘 (源码)微信小程序 大转盘 (源码)微信小程序 大转盘 (源码)微信小程序 大转盘 (源码)微信小...
小程序源码 大转盘 (代码+截图)小程序源码 大转盘 (代码+截图)小程序源码 大转盘 (代码+截图)小程序源码 大转盘 (代码+截图)小程序源码 大转盘 (代码+截图)小程序源码 大转盘 (代码+截图)小程序源码 大转盘 (代码+...
Scratch3.0 04幸运大转盘程序源代码及素材Scratch3.0 04幸运大转盘程序源代码及素材Scratch3.0 04幸运大转盘程序源代码及素材Scratch3.0 04幸运大转盘程序源代码及素材Scratch3.0 04幸运大转盘程序源代码及素材...
微信小程序的大转盘功能是一种常见的互动营销工具,它通过模拟真实的转盘抽奖活动,增强用户参与感和体验感。用户通过点击转盘,转盘随即旋转并在停止后显示用户所获得的奖品或结果。这种功能通常用于促销活动、节日...
Python 使用海龟(turtle)模块实现幸运大转盘 Python源码Python 使用海龟(turtle)模块实现幸运大转盘 Python源码Python 使用海龟(turtle)模块实现幸运大转盘 Python源码Python 使用海龟(turtle)模块实现幸运大...
微大转盘代码
非常全的大转盘测试用例 ,大家快来下载,大大提高编写用例能力
通过我们的微沃平台,你可以轻松实现公众号与微信接口的对接,快速打造微信大转盘、微信刮刮卡、微信会员卡、微信3G微网站、微商城、微团购、微信订餐、超级陪聊、公交查询、快速查询、天气查询等等实用营销工具,...
总的来说,“抽奖大转盘 3D大转盘”是一个集技术与创意于一体的软件项目,其3D效果和作弊功能为开发者提供了广阔的创新空间,而“cj”可能是源代码或资源文件的简称,具体的内容需要解压后查看才能进一步了解实现...
幸运大转盘抽奖码版hx2.9.0功能模块
模块介绍: 支持域名防封功能 可选多种奖品类型 包括实物奖品 虚拟奖品 积分 余额 卡券 可选是否开启强制关注公众号功能 可选是否开启邀请获得抽奖资格功能 可选是否显示抽奖协议功能 可选显示漂浮物功能 可以查看...
Random模块能够提供多种随机数生成方法,例如random.choice()函数可以从一个列表中随机选取一个元素,非常适合用于实现幸运大转盘中的奖品选择机制。 接下来,我们还需要考虑用户界面的设计。虽然Python的基础语法...
Android仿网易云音乐播放转盘界面
首先,我们来看核心的“大转盘”设计。大转盘界面通常由HTML和CSS构建,其中HTML负责结构,CSS负责样式。在`index.html`文件中,可以看到HTML元素用于创建转盘的各个扇区,每个扇区代表一个奖项。CSS通过旋转和动画...