您的位置:首页 > 其它

简单实现大转盘抽奖

2016-04-28 20:57 281 查看
实现效果:

点击“开始抽奖”,异步到后台请求抽奖结果,指针根据后台返回的结果指向奖项。

效果图:



前端:

1.引入

jquery以及jquery.rotate.min.js


2.页面

<div class="rotary-main">
<ul class="rotary-list">
<li class="prize item1"><img src="<ls:templateResource item='/resources/templets/goat/images/thanks.png'/>"></li>
<li class="prize item2"><img src="<ls:templateResource item='/resources/templets/goat/images/first-prize.png'/>"></li>
<li class="prize item3"><img src="<ls:templateResource item='/resources/templets/goat/images/thanks.png'/>"></li>
<li class="prize item4"><img src="<ls:templateResource item='/resources/templets/goat/images/third-prize.png'/>"></li>
<li class="prize item5"><img src="<ls:templateResource item='/resources/templets/goat/images/thanks.png'/>"></li>
<li class="prize item6"><img src="<ls:templateResource item='/resources/templets/goat/images/second-prize.png'/>"></li>
<li class="prize item7"><img src="<ls:templateResource item='/resources/templets/goat/images/thanks.png'/>"></li>
<li class="prize item8"><img src="<ls:templateResource item='/resources/templets/goat/images/third-prize.png'/>"></li>
</ul>
<div class="rotary-btn" ></div>
</div>


其中li标签的是图片,这里需注意,rotary-btn则是“开始抽奖”按钮。

3.JS

1.写转盘转动的方法

function scollRote(angles){
$(".rotary-btn").rotate({
angle:0,
animateTo:angles+1800,
duration:6000,
callback:function (){}
});
}


参数:angles是转动的角度,主要是根据后台返回的结果控制指针转向,

duration转盘转动的时间。。。。

具体参数可参考rotate插件的用法。

转动的角度,需自己根据图片多少计算计算,

1.开始抽奖绑定事件

function bind(){
$(".rotary-btn").bind("click",function(){
btnRotate();
});
}


2.抽奖:异步请求,根据返回结果调用转盘转动的方法,并控制指针指向

//抽奖
function btnRotate(){
//解绑,指针转动的时候不可再次请求
$(".rotary-btn").unbind("click");
//抽奖请求,返回抽奖结果
$.ajax({
url:  "?",
type:'post',
async : true, //默认为true 异步
data:{},
dataType : 'json',
error: function(jqXHR, textStatus, errorThrown) {
},
beforeSend:function(){},
success:function(data){
//比如这里返回的data是不中奖
//不中奖的图片所对应角度数组,然后随机返回,使指针根据角度指向图片
var animateTo=[0,90,180,270];
scollRote(animateTo[Math.floor(Math.random()*animateTo.length)]);
setTimeout(function(){
//由于指针转动设定为6000,那我同步时间,等待指针停止,再进行其他提示操作,这里是再绑定指针转动方法
bind();
}, 6000);
}
});

}


注:这里指针指向图片的角度需自己计算,一圈360,可根据图片的个数进行相除

后台:

简单抽奖概率逻辑:

比如20/100;

int randomNum = 0;
Random rand = new Random();
for(int i = 0 ;i<fz;i++){
randomNum = (int)(rand.nextInt(fm));
if(randomNum==1||randomNum==2||randomNum==3){
break;
}
}


其中fz是20,fm是100,如果随机数返回1,2,3就代表中奖

除此简单逻辑也可以复制做,设置中奖期间,随机数返回某个期间就代表某个奖项。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: