其中有一个不足的就是,在启用“多线程”的时候,在生成随机数的时候,有可能会重复;如果单一的“线程”,还是正常的。最近有同事测试可能有重复现象。我就懒得改了,原理就是这样,有兴趣就改改吧:)
代码如下
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> 模拟摇奖 </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<style>
* {
font-size:10.2pt;
font-family:verdana;
}
</style>
</HEAD>
<BODY>
<table width="80%" border="0" cellpadding="20" cellspacing="0" align="center">
<tr>
<td align="center" valign="middle">线程数:<input type='text' value='3' style='width:25px;' id='threadnumber'/><button id='confirmthread'>确定</button> <button id='cmd_execute'>开始摇奖</button></td>
</tr>
<tr>
<td align="center" valign="middle" id='randmizecontainer' style='font-size:20px;font-weight:bolder;'></td>
</tr>
<tr>
<td align="center" valign="middle"><div id='awardnumber'></div></td>
</tr>
<tr>
<td align="center" valign="middle" align='center'>Power By Bluedestiny</td>
</tr>
</table>
<SCRIPT LANGUAGE="JavaScript">
<!--
// Power By Bluedestiny
function $(obj) {return document.getElementById(obj);}
function rollaward() {};
rollaward.awardnum=null;
rollaward.total=1000;//摇奖的数组最大下标
rollaward.rollspeed=10;//摇奖速度
rollaward.threadnum=3;//默认线程数
rollaward.count=0;
rollaward.threadnumArray=[];
rollaward.rndnumArray=[];
rollaward.rndidArray=[];
rollaward.awardArray=[];
rollaward.initialize=function() {
for(var i=0;i<rollaward.total;i++)
rollaward.awardArray[i]='var ' + i;
for(var i=0;i<rollaward.threadnum;i++)
{
var div=document.createElement('DIV');
div.id='randmizenum'+i;
div.innerHTML='00000';
div.runtimeStyle.border='2px solid blue';
div.runtimeStyle.width='100px';
div.runtimeStyle.margin='5px 0px 5px 0px';
$('randmizecontainer').appendChild(div);
rollaward.rndidArray[i]='randmizenum'+i;
}
}
rollaward.confirmthreadnum=function() {
rollaward.removethreadnum();
rollaward.threadnum=parseInt($('threadnumber').value);
rollaward.initialize();
event.srcElement.disabled=true;
}
rollaward.removeinterval=function()
{
for(var i=0;i<rollaward.threadnum;i++)
clearInterval(rollaward.threadnumArray[i]);
}
rollaward.removethreadnum=function()
{
for(var i=0;i<rollaward.threadnum;i++)
if($('randmizenum'+i))$('randmizenum'+i).removeNode(true);
}
rollaward.start=function() {
if(rollaward.total==0)
{
rollaward.removeinterval();
return;
}
for(var i=0;i<rollaward.threadnum;i++)
{
rollaward.rndnumArray[i]=parseInt(Math.random()*(rollaward.total));
$('randmizenum'+i).innerHTML=rollaward.awardArray[rollaward.rndnumArray[i]];
}
$('cmd_execute').value='停止摇奖';
}
rollaward.stop=function() {
rollaward.removeinterval();
rollaward.count++;
$('awardnumber').innerHTML+='第 ' + rollaward.count + ' 组中奖者:'
for(var i=0;i<rollaward.threadnum;i++)
{
$('awardnumber').innerHTML+=rollaward.awardArray[rollaward.rndnumArray[i]]+' ';
}
$('awardnumber').innerHTML+='<br/>';
$('cmd_execute').value='开始摇奖';
for(var i=rollaward.awardnum;i<rollaward.total;i++)
rollaward.awardArray[i]=rollaward.awardArray[i+1];
rollaward.total--;
rollaward.awardArray.length--;
}
function _click()
{
if(event.srcElement.value=='开始摇奖')
{
for(var i=0;i<rollaward.threadnum;i++)
rollaward.threadnumArray[i]=setInterval(rollaward.start,rollaward.rollspeed)
}
else
{
rollaward.stop();
}
}
function _unload()
{
rollaward.removethreadnum();
}
rollaward.initialize();
$('cmd_execute').attachEvent('onclick',_click);
$('confirmthread').attachEvent('onclick',rollaward.confirmthreadnum);
window.attachEvent('onbeforeunload',_unload);
//-->
</SCRIPT>
</BODY>
</HTML>
发表于 @ 2006年01月13日 23:08:00|评论(loading...)|编辑