JAVASCRIPT: 一个“简单”的抽奖例子

     找了很多资料,弄了整天才整出差不多的功能出来。第一次使用这么多JS脚本,下面的代码要说技术也没什么技术,要说思想还是有的。写java写惯了,这OOA还是有体现出来的。这功能还是比较复杂的。我想对大家来说,抽取一部分有用的代码就行了。里面解释还是比较清晰的。
     

<script language="javascript">
function mask(str,begin,end,char){
  //解决数字number类型的错误。
  str=""+str;
 var fstStr = str.substring(0,begin);
 var scdStr =str.substring(begin,end);
 var lstStr = str.substring(end,str.length);
 var matchExp = /\w/g;
  maskStr =  fstStr+scdStr.replace(matchExp,char)+lstStr;
  return maskStr;
 
}
//定义一个数组,用来存放显示内容
var arrAtts=new Array();   
//N从排序前几名获取0随机,
var cutFrom =0;
//如果是截取排序前几名
// see cutFrom
var numCut= cutFrom==0?100:cutFrom;
for(var i =0 ;i<numCut;i++){

 arrAtts[i]=i+1399999999;
}
//如果剩余参与者为0
if(arrAtts.length==0){
 alert("已经没有参与者,抽奖将结束!");
 //转到抽奖结果页面显示最后抽奖结果
}

//滚动速度
var rollSpeed=1000;
//中奖数量
var winnerCount=10;
//自动抽奖n值自动开始妙数,手动0
var isAutoStart =0;


//支持参与多个抽奖1,不支持0
var isMutil = 0;
//掩码从第三位开始覆盖3个字符F
var masking ='3,3,*';
//中奖结果
var prizewinners = new Array();


//定义定时器对应对象以供停止时去除滚动
var interval;
//定义数组原型方法,获取随机值,由于数组可能不同索引有相同的值,这里只是返回值
//所以不支持重复参与功能,可以提供滚动时使用
Array.prototype.random=function() {
 var a=this;
 var len=a.length;
 var value;
  value = parseInt(Math.random()*len);
 return a[value];
}
//the array include the indexes that has return by function random
Array.prototype.arrIWR=new Array();
//定义数组原型方法,获取随机索引
Array.prototype.rdmIdx=function() {
 var a=this;
 var arrExisted = a.arrIWR;
 var len=a.length;
 var value;
 //获取无重复索引
 do{
  value = parseInt(Math.random()*len);
  
 }while(this.repeat(value));
 //增加随机索引
 arrExisted[arrExisted.length]=value;
 return value;
}

Array.prototype.repeat=function() {
var array = this.arrIWR;
alert(array);
  for (s = 0; s <array.length; s++) {
             thisEntry = array[s].toString();
              if (thisEntry == value) {
                  return true;
            }
        }
       return false;
}


function init(){
 document.all.txtRoll.value =masking=="0"?arrAtts[0]:setMask(arrAtts[0]);
 //如果是自动抽奖
 if(isAutoStart>0){
  setTimeout("showPrizewinners()",isAutoStart*1000);
  document.all.btnStart.disabled ="disabled";
  document.all.btnStop.disabled = "disabled";
  document.all.txtRoll.disabled = "disabled";
 }
}
//根据设置过滤掩码
function setMask(str){
  var masks = masking.split(",");
  var begin = masks[0]-1;
  var end = begin+parseInt(masks[1]);
  var char = masks[2];
  
  return mask(str,begin,end,char);
 
}
//滚动抽奖号码
function rollNumbers(){
 var value = arrAtts.random();
 document.all.txtRoll.value =masking=="0"?value:setMask(value);
}


//开始抽奖
function startRoll() {
 //如果中奖数量大于参与者的数量,则开始抽奖
 if(checkCount()){
  clearInterval(interval);
  interval=setInterval("rollNumbers()",rollSpeed);
  document.all.btnStart.disabled = "disabled";
  document.all.btnStop.disabled = "";
 }else{
  showResult();
 }
}
//停止滚动
function stopRoll() {
 clearInterval(interval);
 document.all.btnStart.disabled ="";
 document.all.btnStop.disabled = "disabled";
}
//显示中奖结果
function showPrizewinners(){
 //根据中奖数量获取中奖结果
 //如果剩余参与者小于中奖者数量的话直接获取所有剩余参与者为中奖者
 if( winnerCount>arrAtts.length){
  for(var i = 0; i<winnerCount;i++){
  var index = arrAtts.rdmIdx();
   //获取无重复的索引值,支持多投多奖
   prizewinners[i] = arrAtts[index];   
  }
 }
 showResult();
 
 //获取下一个奖项的信息
}
//initMarquee();

//自动 setInterval("lottery()",1000);

//检查剩余参与者
function checkCount(){
 if( winnerCount<=arrAtts.length){
 prizewinners = arrAtts;
  alert("剩余参与者全部中奖!");
  return false;
 }
 return true;
 
}
//查看中奖结果
function showResult(){
 alert("中将结果:"+prizewinners.toString());
}
</script>
</head>
<body onLoad="init();">
<table align="center">
<tr><td colspan="2"><input type="text"  name="txtRoll"/></td></tr>
<tr align="center"><td><input  type="button" value="开始" name="btnStart"
 οnclick="startRoll(); "/></td><td><input  type="button" value="停止"   name="btnStop"
  οnclick="stopRoll();showPrizewinners();" disabled="disabled"/></td></tr>
  </table>

</body>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟V-SpHeNIC

支持科研技术

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值