原生js-抽奖系统(简易版)

原生js-抽奖系统(简易版)

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>原生js实现抽奖系统-简易版</title>
    <style type="text/css">
        .spanbox{
            width: 650px;
            height: 400px;
            margin: 20px auto;
            display: flex;
            justify-content: space-between;
            align-items: center;
            flex-wrap: wrap;
        }
        .spanbox span{
            width: 60px;
            height: 60px;
            text-align: center;
            line-height: 60px;
            font-size: 28px;
            border-radius: 50%;
            background-color: #DDDDDD;
        }
        .active{
            background-color: crimson !important;
            color: #fff;
        }
    </style>
</head>
<body>

<div class="spanbox">

</div>

<button type="button" id="action" style="display:block;margin: 10px auto;">开始</button>

<script>
    var spanbox=document.getElementsByClassName("spanbox")[0]

    //创建60个span标签并且添加到 spanbox 中
    for(let i=0;i<60;i++){
        // 创建span标签
        var span = document.createElement('span');
        span.innerText=i+1
        spanbox.appendChild(span)
    }

    //获取到spanbox 中的span标签集,并将第一个span添加active这个类
    var spanbox_span=spanbox.getElementsByTagName("span")
    spanbox_span[0].classList.add("active")

    //获取spanbox 中的span标签个数
    var spanbox_length=spanbox.getElementsByTagName("span").length

    //用来判断定时器是否开启状态
    var keep_num=-1

    //用来记录产生的随机数
    var randomArr=[]

    //指定范围的随机数
    function randomNum(minNum,maxNum){
        //arguments.length 判断传入参数的个数
        switch(arguments.length){
            case 1:
                return parseInt(Math.random()*minNum+1,10);
                break;
            case 2:
                return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10);
                break;
            default:
                return 0;
                break;
        }
    }

    function setT(){
        var random=randomNum(1,spanbox_length)
        randomArr.push(random)

        if(randomArr.length>1)
        {
            for(var i=1;i<randomArr.length;i++){
                //如果随机到的数和前一个数相同,则清除定时器
                if(randomArr[i]==randomArr[i-1]){
                    action.innerHTML="开始"
                    clearInterval(keep)
                    keep_num=-keep_num
                    alert(randomArr[i]+1)
                }
            }
        }



        for(var i=0;i<spanbox_length;i++){
            //全部的span删除active这个类
            spanbox_span[i].classList.remove("active")
        }
        //随机到的span添加active这个类
        spanbox_span[random].classList.add("active")
    }


    //创建定时器
    var keep=setInterval(setT,100)

    //清除定时器
    clearInterval(keep)

    //手动点击开始或者结束
    var action=document.getElementById("action")
    action.onclick=function(){
        //每次点击都清空randomArr
        randomArr=[]

        keep_num=-keep_num

        if(keep_num===1){
            keep=setInterval(setT,100)
            action.innerHTML="结束"
        }
        if(keep_num===-1){
            action.innerHTML="开始"
            clearInterval(keep)
        }
    }
</script>
</body>
</html>

原生js-抽奖系统(简易版)

实例地址

实例地址

原文地址

原文地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值