js抽獎,跑馬燈

 
  
分享本身寫的跑馬燈抽獎。

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>
相關文章
相關標籤/搜索