博客專欄

        EEPW首頁 > 博客 > 原生JS實現簡易轉盤抽獎

        原生JS實現簡易轉盤抽獎

        發布人:lantu 時間:2020-06-28 來源:工程師 發布文章

        <!DOCTYPE html>

        <html>

        <head>

            <meta charset="UTF-8">

            <meta name="viewport" content="width=device-width, initial-scale=1.0">

            <meta http-equiv="X-UA-Compatible" content="ie=edge">

            <title>turntable</title>

            /*<link rel="stylesheet" href="css/index.css">*/

            <!-- css -->

            <style>

            body, table, tr, td {

                margin: 0;

                padding: 0;

            }

            .wrapper {

                position: relative;

                width: 300px;

                height: 300px;

                margin: 100px auto 0;

                text-align: center;

            }

            table {

                display: inline-block;

            }

            td, th {

                width: 100px;

                height: 100px;

                border: 1px solid #ccc;

                border-radius: 20px;

            }

            th {

                cursor: pointer;

                user-select: none;

            }

            /* 設置標識樣式 */

            tr .active {

                background-color: #ff6700;

            }

            /* 設置中獎結果 */

            .results {

                display: none;

                position: absolute;

                top: 0;

                left: 50px;

                width: 200px;

                height: 100px;

                border: 1px solid black;

                border-radius: 30px;

                text-align: center;

                line-height: 100px;

                background-color: skyblue;

            }

            </style>

        </head>

        <body>

            <div>

                <table>

                    <tr>

                        <td>今</td>

                        <td>天</td>

                        <td>吃</td>

                    </tr>

                    <tr>

                        <td>什</td>

                        <th id="play">開始</th>

                        <td>么</td>

                    </tr>

                    <tr>

                        <td>來</td>

                        <td>抽</td>

                        <td>下</td>

                    </tr>

                </table>

                <div>今天吃火鍋</div>

            </div>

           <!-- <script src="js/index.js"></script> -->

           <!-- js -->

           <script>

            // 獲取開始元素

        var playBtn = document.getElementById('play');

        // 獲取所有td元素,獲取到偽數組

        var tdAry = document.getElementsByTagName('td');

        // 將偽數組的長度存儲在tdLen變量中

        var tdLen = tdAry.length;

        // 設置計時器變量,剛開始為空

        var startTime = null;

        // 自己構造數組,使橘紅色背景能夠按照自己想要的方向進行循環移動

        var tdList = [0, 1, 2, 4, 7, 6, 5, 3];

        // 設置橘紅色背景標識

        var tdId = 0;

        // 設置已經奔跑的次數,剛開始為0次

        var time = 0;

        // 固定跑3圈,一圈8次

        var fixNum = 24

        // 定義最大隨機數

        var MaxNum;

        // 定義隨機數,開始和結束的閾值

        var randomNum;

        // 獲取中獎結果元素

        var results = document.getElementsByClassName('results')[0];


        // 綁定點擊事件,當鼠標點擊開始按鈕后,觸發playStart函數

        playBtn.onclick = playStart;


        function playStart() {

            // 如果計時器不為空,那就意味著這個線程已經在跑了,就直接退出。

            if (startTime != null) {

                return;

            }

            results.style.display = 'none';

            // 奔跑的次數

            time = 0;

            // 最大隨機數,取值[0, 8],確保每個都能被選到

            MaxNum = parseInt(Math.random() * 9) + fixNum;

            // 隨機閾值,控制剛開始跑幾步加速,以及剩幾步減速,取值范圍[3, 7]

            randomNum = parseInt(Math.random() * 5 + 3);

            // 開啟計時器,每200毫秒執行一次move函數

            startTime = setInterval(move,200);

            

        }


        function move() {

            // 每執行一次奔跑次數time就加1

            time++;

            // 每次運行當前的背景色清空

            tdAry[tdList[tdId]].className = "";

            // 每執行一次背景色標識就加1

            tdId++;

            // 判斷如果標識大于7的話就標識tdId就等于0,否則的話就等于它本身,這個步驟如果沒有進行判斷和賦值的話,tdId就會一直自增下去,那么對應的td元素將沒有,后臺就會報錯

            tdId = tdId > 7 ? 0 : tdId;

            // 設置當前的td背景色

            tdAry[tdList[tdId]].className = "active";

            

            //如果奔跑的次數等于隨機閾值的話,那么當前的計時器清空,重新開啟一個新的計時器,并且是每20毫秒執行一次,這個步驟是控制加速的 

            if (time == randomNum) {

                clearInterval(startTime);

                startTime = setInterval(move,20);

            }


            // 如果奔跑的次數加上隨機的閾值的話,那么就將當前的加速的計時器清空,并且重新開啟一個每200毫秒的計時器,這個步驟是控制減速的

            if (time + randomNum >= MaxNum) {

                clearInterval(startTime);

                startTime = setInterval(move,200);

            }


            // 如果奔跑的次數大于等于最大的奔跑次數,那么清空當前計時器,并且計時器等于null,直接返回出去,一次抽獎結束。這個步驟是控制抽獎結束。

            if (time >= MaxNum) {

                clearInterval(startTime);

                startTime = null;

                // switch語句判斷抽獎結果,這部分比較簡單,就不贅述了。

                switch(tdList[tdId]) {

                    case 0:

                        results.innerText = '今天吃轉轉樂';

                        results.style.display = 'block';

                        break;

                    case 1:

                        results.innerText = '今天吃蜀九香';

                        results.style.display = 'block';

                        break;

                    case 2:

                        results.innerText = '今天吃KFC';

                        results.style.display = 'block';

                        break;

                    case 4:

                        results.innerText = '今天吃海底撈';

                        results.style.display = 'block';

                        break;

                    case 7:

                        results.innerText = '今天吃外賣';

                        results.style.display = 'block';

                        break;

                    case 6:

                        results.innerText = '今天吃土';

                        results.style.display = 'block';

                        break;

                    case 5:

                        results.innerText = '今天吃牛排';

                        results.style.display = 'block';

                        break;

                    case 3:

                        results.innerText = '今天吃草本湯';

                        results.style.display = 'block';

                        break;

                }

                return;

            }


        }



            </script>

        </body>

        </html>

        原文:https://www.cnblogs.com/Counterrr/p/10599291.html

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

        逆變器相關文章:逆變器原理


        西門子plc相關文章:西門子plc視頻教程


        逆變器相關文章:逆變器工作原理




        關鍵詞: js

        技術專區

        關閉
        主站蜘蛛池模板: 香河县| 吴江市| 教育| 上高县| 定安县| 南京市| 大姚县| 安阳市| 英德市| 汉中市| 湘潭县| 吉首市| 石门县| 南川市| 小金县| 蒙自县| 荆州市| 枣庄市| 瑞昌市| 巴林左旗| 广西| 安塞县| 肥城市| 河间市| 富民县| 信阳市| 馆陶县| 咸丰县| 新巴尔虎右旗| 庆安县| 康定县| 分宜县| 曲松县| 柳林县| 当雄县| 房山区| 二连浩特市| 乌审旗| 奉贤区| 漳州市| 松阳县|