分享本身寫的跑馬燈抽獎。
HTML代碼
<!--首先將一個div的背景設爲一個圓形--> <div style=" width:240px; height:232px; background-image:url(Roundel.png);"> <!--再在中間放一個div用margin搞到中間去--> <div style=" width:210px; height:210px; margin:15px 11px 15px 11px;"> <!-- 再在div裏放table充滿 --> <!--HTML代碼,就是創建一個table設成這個樣子,給存放獎品的td加一下統一的name--> <table id="tbroundel"> <tr> <td name="roundelgoods" id="turn1" >1</td><td name="roundelgoods" id="turn2" >2</td><td name="roundelgoods" id="turn3" >3</td> </tr> <tr> <td name="roundelgoods" id="turn8" >8</td><td id="RunDraw"><input id="btnrun" type="button" value="開始" onclick="startup()" /></td><td name="roundelgoods" id="turn4" >4</td> </tr> <tr> <td name="roundelgoods" id="turn7" >7</td><td name="roundelgoods" id="turn6" >6</td><td name="roundelgoods" id="turn5" >5</td> </tr> </table> </div> </div>
效果javascript
csscss
<style type="text/css"> #tbroundel { width:210px; height:210px; } #tbroundel td { width:70px; height:70px; text-align:center; } #RunDraw { padding:0; text-align:center; } #RunDraw input { width:100%; height:100%; margin:0; background-color:Red; } </style>
js算法java
<script type="text/javascript"> var t; ///用它存放setinterval,不用扣得太細,由於只要用到setinterval最後就得用 window.clearInterval(t);去釋放他 var index = 1;/////這個用來記錄當前循環的次數,好比點了抽獎要轉四圈,每轉一圈有8個獎品,那一共就要循環8*圈數 var circles = 1;////抽獎要轉的圈數 var currentcircles = 1; ///記錄當前是第幾圈setinterval的第二個參數,經過操縱他來實現變速 var speed = 0;/////轉動的速度,用它做爲 var endpoint = 0; /////最後中止的位置,即選中了誰 ////抽獎開始 function startup() { ///點一次抽獎過程當中按鈕禁用 document.getElementById("btnrun").disabled = true; /////隨機生成圈數,要跑幾圈,不要太少了,太少了看着就不舒服。這裏是生成4-14之內的隨機整數 circles = Math.round(Math.random() * 10 + 3); /////終結點,生成1-8以內的隨機數,由於你一圈有8個獎品 endpoint = Math.round(Math.random() * 8); ////當前的圈數 currentcircles = 1; ////速度,誰的過高了會很慢 speed = 700; ////當前循環的次數 index =1; /////取得放獎品的<td>的數組 var goods = document.getElementsByName("roundelgoods"); ////存放獎品的<td>的數組 var drawturn = []; ////遍歷加入到drawturn數組裏 for (var i = 0; i <(8); i++) { // document.getElementById("turn" + (i + 1)).style.border = "0"; ////加入時把他們的樣式置爲初始樣式 document.getElementById("turn" + (i + 1)).style.fontSize = "large"; document.getElementById("turn" + (i + 1)).style.color = "black"; ///push方法,向數組內追加一個元素 drawturn.push(document.getElementById("turn"+(i+1))); } ////開始循環 t= setInterval(HighTurn,speed); } ///循環獎品方法 function HighTurn() { /////若是當前循環次數大於1,則當前循環說明不是1號獎品,那就得吧這個獎品的前一個兄弟的樣式設爲初始值 if (index > 1) { /////固然若是這時候index除以8餘數爲1的話說明這時至少循環完一圈且恰好又循環到1號獎品了,這就不能用(數組下標-1)的方法去清除樣式了,由於他的前一位是上一次循環的8號獎品 if ((index % 8) == 1) { // document.getElementById("turn8").style.border = "0 document.getElementById("turn8").style.fontSize = " large"; document.getElementById("turn8").style.color = "black"; } ////若是不是的話就好說了,直接(數組下標-1)清除樣式 else { //document.getElementById("turn" + ((index - (8 * (currentcircles - 1))) - 1)).style.border = "0"; document.getElementById("turn" + ((index - (8 * (currentcircles - 1))) - 1)).style.fontSize = " large"; document.getElementById("turn" + ((index - (8 * (currentcircles - 1))) - 1)).style.color = "black"; // document.getElementById("turn" + ((index - (8 * (currentcircles - 1))) - 1)).style.border = "3px solid #ccc"; } } ////處理完前一個商品的樣式後再來改變當前獎品的樣式——大號字體,紅色 document.getElementById("turn" + (index - (8 * (currentcircles - 1)))).style.fontSize = " xx-large"; document.getElementById("turn" + (index - (8 * (currentcircles - 1)))).style.color = "red"; ///完事以後判讀如今的循環次數除以8的餘數是否爲0,若是爲零則說明一次循環已經到了最後一個獎品,接下來要進入下一圈了(不須要考慮第一次循環的,由於index的初始值是1,1/8不爲0) if ((index % 8) == 0) { // 進入下一圈就得當前圈數+1 currentcircles++; } ///而後循環次數+1,不要把它放到圈數加1的前面去 index++; ///這裏用來改變速度,在下設定的規則是在第一圈是每通過一個獎品則速度+80,setInterval的第二個參數是多長時間執行一次的意思,因此值越小,執行的頻率越高 if (currentcircles == 1) { ///注意了,我就是由於沒寫這句話被悶了好半天,不寫他的話你的程序會一直在跑setInterval釋放不了。由於改變了setInterval的參數要讓他生效的話就得從新執行(我也不懂,可是試了一下這樣好使)。因此先把以前的清一下 window.clearInterval(t); ///改變速度 speed -= 80; ///在從新執行 t = setInterval(HighTurn, speed); } ///在下設定的在最後一圈的時候開始減速 else if (currentcircles == circles ) { window.clearInterval(t); speed += 80; t = setInterval(HighTurn, speed); } ////用來判斷是否循環完了,若是當前圈數==要循環的圈數,且當前循環到的獎品編號==終結點則斷定爲循環結束,最終會停在終結點位置的獎品上 if (circles == currentcircles && ((index - 1) % 8) == endpoint) { ///清除setInterval window.clearInterval(t); ///回覆按鈕使用 document.getElementById("btnrun").disabled = false; alert("恭喜抽中了" + endpoint + "號獎品"); return; } } </script>