简易抽奖网页

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MrwanZH/article/details/77152307

简易抽奖网页需要完成以下几个功能:
        * 1.简单的网页界面设计
        * 2.回车开始抽取再次回车暂停
        * 3.三次抽取后结束
* 4.ESC键重新抽取


界面设计部分不赘述


实现思想(JavaScripts部分):
1. 设计一个数组存放被抽取人员的名字,每抽取一次就从数组中remove掉这个人。三次后结束
2. 设置全局按键监听document.onkeydown,然后利用switch给定参数e.keyCode来区分当前按的回车还是ESC。

3. 设置一个boolean型全局变量isBegin ,给定初值false,来判定当前是否处于滚动状态。为false表示此次操作为停止滚动获得幸运儿,为true则为开始滚动。

<!DOCTYPE html>  
<html>  
  
    <head>  
        <meta charset="UTF-8">  
        <title></title>  
        <style>  
            * {  
                margin: 0;  
                padding: 0;  
            }  
            body{  
                background-color: #3F51B5;  
            }  
            .aside-left {  
                position: absolute;  
                left: 0;  
                padding: 10px;  
            }  
              
            ol {  
                margin-left: 20px;  
            }  
              
            ol li {  
                padding: 10px 10px;  
                font: italic 12pt "myfont";  
            }  
              
            h2 {  
                text-align: center;  
            }  
              
            .aside-right {  
                float: right;  
                margin-right: 30px;  
            }  
              
            .container {  
                position: absolute;  
                left: 50%;  
                margin-left: -512px;  
                width: 1024px;  
                height: 614px;  
                background: url(img/bg.jpg) no-repeat;  
            }  
              
            .title {  
                position: absolute;  
                left: 0;  
                right: 0;  
                top: 2em;  
                font: bold 3em "楷体";  
                text-align: center;  
            }  
              
            @font-face {  
                font-family: "myfont";  
                src: url('font/FZLTXHJW.TTF');  
            }  
              
            #show-box {  
                position: absolute;  
                left: 0;  
                right: 0;  
                top: 50%;  
                font: bold 3em "myfont";  
                text-align: center;  
            }  
              
            footer {  
                position: absolute;  
                bottom: 0;  
                left: 0;  
                right: 0;  
                text-align: center;  
                font: italic 12pt "myfont";  
            }  
            .tip{  
                display: inline-block;  
                animation: sc 5s infinite linear;  
            }  
            /*自定义动画*/  
            @-webkit-keyframes sc{  
                0%{  
                    transform: scale(1.0);  
                }  
                50%{  
                    transform: scale(1.5);  
                }  
                100%{  
                    transform: scale(1.0);  
                }  
            }  
        </style>  
    </head>  
  
    <body>  
        <div class="aside-left">  
            <h2>操作说明</h2>  
            <ol>  
                <li>回车开始抽取</li>  
                <li>再次回车暂停</li>  
                <li>3次抽取后结束</li>  
                <li>ESC键重新抽取</li>  
            </ol>  
        </div>  
        <div class="container">  
            <div class="title">  
                辩论赛观众名额抽取  
            </div>  
            <div id="show-box">  
                <span class="tip">Enter键开始</span>  
            </div>  
        </div>  
        <div class="aside-right">  
            <h2>抽中名单</h2>  
            <ol id="list">  
            </ol>  
        </div>  
        <!--背景音乐 -->  
        <audio src="source/bgm.mp3" autoplay id="bgm" loop="-1"></audio>  
        <script>  
            //数据  
            var names = ['郭山彤','梁敦厦','霍负浪','虞信品','马仁毅','冯州龙',  
                     '简务帅','黎丙赣','谢尉争','赵单羽','孟航沛','龚开梦',  
                     '黄蓝风','易堃登','蔡农仲','高洪泉','巫家昱','赵道霄',  
                     '章学共','乐武亮','费宜鸿','张津广','梁胤鸣','吕 聪',  
                     '蒋进如','林豪谱','孙剑佛','魏成贯','卫耿羿','谢协湃',  
                     '岑刚飘','吴资龙','陈仓翼','刘枝迟','尤帅齐','孙彩武',  
                     '陈莉汐','程欢亭','邬肖任','尤政航','颜东鑫','欧有皆',  
                     '高季晨','孙奎汝','龚韶釜','费汐家','钱铮友','沈锵良','傅 利','雷友水'  
  
            ];  
            var intavlflag; //标记  
            var isBegin = false; //是否正在滚动 默认未开始状态  
            var lucker; //记录当前幸运儿  
            var luckers = []; //存储所有幸运儿  
            //全局按键事件  
            document.onkeydown = function(e) {  
                //获取事件对象中的按键码   13:enter       27:esc  
                switch(e.keyCode) {  
                    case 13:  
                        //抽取相关  
                        extract();  
                        break;  
                    case 27:  
                        //将已被抽取的名单合并到源数组中(归还名额)  
                        names = names.concat(luckers);  
                        console.info('还原数组:' + names);  
                        luckers = []; //清空数组  
                        //清除列表内幸运儿名单  
                        $('list').innerHTML = '';  
                        break;  
                }  
            }  
  
            //抽取准备  
            function extract() {  
                if(isBegin) {  
                    //停止  
                    clearInterval(intavlflag);  
                    //将幸运儿加入数组  
                    luckers.push(lucker);  
                    //动态创建节点  
                    var li = document.createElement('li');  
                    li.innerHTML = lucker;  
                    //将节点加入ol元素中  
                    $('list').appendChild(li);  
                    //从源数组移除被抽中的幸运儿  
                    removeName(names, lucker);  
                    //改变音效  
                    $('bgm').src = 'source/cheer.mp3';  
                    //增加样式(动画)  
                    $('show-box').className='tip';  
                    //标记滚动状态为停止  
                    isBegin = false;  
                } else {  
                    //开始  
                    //先判断数组中人数是否已达到3人  
                    if(luckers.length < 3) {  
                        //启动抽取每隔0.05秒刷新界面内容  
                        intavlflag = setInterval(begin, 50);  
                        $('bgm').src = 'source/bgm.mp3';  
                        //去除样式(停止动画)  
                        $('show-box').className='';  
                        //将标志位设置为已启动  
                        isBegin = true;  
                    } else {  
                        alert('人数已满!');  
                    }  
                }  
            }  
  
            //从源数组中移除被抽中的幸运儿  
            function removeName(arr, name) {  
                for(var i = 0; i < arr.length; i++) {  
                    if(arr[i] == name) {  
                        arr.splice(i, 1);  
                        console.info('移除:' + name + '--剩余:' + arr);  
                        break;  
                    }  
                }  
            }  
  
            //开始抽取,随机获取下标  
            function begin() {  
                var index = Math.floor(Math.random() * names.length);  
                lucker = names[index];  
                $('show-box').innerHTML = lucker;  
            }  
  
            function $(id) {  
                return document.getElementById(id);  
            }  
        </script>  
    </body>  
  
</html>  

猜你喜欢

转载自blog.csdn.net/MrwanZH/article/details/77152307
今日推荐