抽奖 开源 html5,抽奖转盘.html · smilestone/awardRotate - Gitee.com

这篇博客详细介绍了如何使用jQuery实现一个抽奖转盘的功能,包括转盘的样式设置、点击事件处理、随机旋转角度的生成以及中奖概率控制。通过模拟网络超时和正常抽奖情况,调整不同奖项的中奖概率,并提供了关键代码示例。
摘要由CSDN通过智能技术生成
jQuery 抽奖转盘

#box{width: 340px;height: 340px;

position: absolute;

left:50%;top:50%;margin-left:-170px;margin-top:-170px;

background-image: url("bg-lottery.png");

}

#pointer{width: 186px;height: 186px;

margin-left:77px;margin-top:77px;

background-image: url("playbtn.png");

cursor: pointer;

}

#records{

position: absolute;

left: 100%;margin-left: -400px;

top:50%;margin-top: -340px;

display: block;line-height: 15px;

width: 400px;background: cornsilk;color: crimson;

height:auto;font-size: 12px;

border:dotted black 1px;}

$(function(){

var backDoor=true;

var overTime=[0,1];//随机网络超时处理 0 超时, 1正常抽奖

var rotateObj=[

{myangle:0,msg:'恭喜,获得理财金2000元',rangeL:70,rangeR:89},

{myangle:60,msg:'谢谢参与,再接再厉吧!',rangeL:'',rangeR:''},

{myangle:120,msg:'恭喜,获得理财金5200元!',rangeL:90,rangeR:99},

{myangle:180,msg:'恭喜,获得京东e卡!',rangeL:0,rangeR:39},

{myangle:240,msg:'谢谢参与,再接再厉吧!',rangeL:'',rangeR:''},

{myangle:300,msg:'恭喜,获得理财金1000元',rangeL:40,rangeR:69},

{myangle:1440,msg:'sorry,由于系统访问量过大,网络超时!'}

];

var overTimeAngle=[1,3,5,7,9,11];//产生随机的边界角度的倍数

var randOverNum;

var randNum;

//空格键 控制是否有中奖概率

$(document).keydown(function(event){

var kcode=event.keyCode;

if(kcode==32){

if(backDoor==true){

backDoor=false;//永远不会中奖

}

else{

backDoor=true;//正常概率抽奖

}

}

});

//开始抽奖

$("#pointer").click(function(){

randOverNum=overTime[Math.floor(Math.random(0,1)*overTime.length)];//生成是否进入网络超时情况

if(backDoor==true){//如果允许有中奖概率

console.log("不中奖后门关闭!");

if(randOverNum==0){//进入网络故障

randNum=6;

console.log("有网络问题code:"+randOverNum+"中奖随机数指定为:"+randNum);

var baseAngle= overTimeAngle[Math.floor(Math.random(0,5)*overTimeAngle.length)]*30;//产生随机的边界角度作为参数:基础角度 的值

myRotate("#pointer",rotateObj,5000,baseAngle,randNum);//网络超时情况必须填写baseAngle参数

}

else{//正常抽奖

len=rotateObj.length;

randNum = Math.floor(Math.random(0,len-1)*(len-1));

console.log("无网络问题code:"+randOverNum+"正常抽奖,随机数是:"+randNum);

randCtrl(randNum);//如果抽中某一项奖,则进行二次运作,不同奖项号码,将被制定不同的概率再次抽奖,在概率范围内的视为最终中奖!

}

}

else {

console.log("开启了不中奖后门!");

myRotate("#pointer",rotateObj,4000,1440,noAward());//noAward()是不中奖的号码中的一个

}

});

//转动函数 共5个参数分别是指针的id("#idname")或class(".className"),抽奖提示语,旋转时间,基础旋转角度,随机奖品序号0-6

function myRotate(pointer,rotateData,duration,baseAngle,randNum){

var ang=rotateData[randNum].myangle;//获取奖品的旋转位置

$(pointer).rotate({

angle:0,

duration: duration,

animateTo:ang+(baseAngle||1080),

callback:function(){

alert(rotateData[randNum].msg);

$("#records").html($("#records").html()+rotateData[randNum].msg+"  "+getSysDate()+"
");

console.log($(this).getRotateAngle());

$(pointer).rotate({

angle:0

});

}

});

}

//大盘转动

function bigPanRotate(addAngle){

console.log("偏移角度:"+addAngle);

$("#box").rotate({

angle:0,

duration: 3000,

animateTo:-(1440+addAngle),

callback:function(){

$(this).rotate({

angle:0

});

}

});

}

//中奖概率控制

function randCtrl(randNum){

var awardNum=[0,2,3,5];

var rangL,rangR;//定义各中奖号码的范围(概率)

var randRange;

var checkIn = $.inArray(randNum,awardNum);//如果存在,则返回该值在数组中的index,不存在返回-1

if(checkIn>=0){//随机抽奖号码在中奖号码之中,进行后台二次抽奖运作

randRange=Math.floor(Math.random(0,99)*100);//产生新的随机中奖号码 0-99的整数

rangL=rotateObj[randNum].rangeL;//当前中奖号码的左范围

rangR=rotateObj[randNum].rangeR;//当前中奖号码的右范围

console.log("抽中中奖号码:"+randNum+",新中奖号码是:"+randRange+",中奖范围是:("+rangL+","+rangR+"),中奖率:"+(rangR-rangL+1)+"%");

if(randRange>=rangL&&randRange<=rangR){//如果新的随机数 randRange在这个范围内 则该号码中奖

console.log("新中奖号码:"+randRange+",在中奖控制范围内,恭喜中奖!");

myRotate("#pointer",rotateObj,3000,1080,randNum);

}

else {//否则,无论randnum是哪个中奖号码 如果新的randrange不在相应号码的范围内就不算中奖

console.log("新中奖号码:"+randRange+",不在中奖控制范围内,再接再厉!");

myRotate("#pointer",rotateObj,4000,1440,noAward());//最后一个参数是randNum=noAward()的返回值

}

}

else {//随机号码不在中奖号码之中,执行不中奖函数

console.log("没有抽中任意中奖号码,将执行任意不中奖处理"+randNum);

myRotate("#pointer",rotateObj,4000,1440,noAward());//最后一个参数是randNum=noAward()的返回值

}

}

//返回不中奖选项

function noAward(){

var noAwardArr=[1,4];//只允许抽中1,4项 无奖项

len=noAwardArr.length;

randNum = noAwardArr[Math.floor(Math.random(0,len-1)*len)];//只能取到1,4两个没有奖项的可能

console.log("执行了不中奖函数,不中奖的随机数是:"+randNum);

return randNum;//函数返回值 是 不中奖的号码

}

})

一键复制

编辑

Web IDE

原始数据

按行查看

历史

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值