js实现彩票机选效果

每天下班途中经过体彩店,心情好就会买几注,也就几块钱,全当是消遣,好歹也算参与了好几十个亿的大项目
一般机选为主,也就是随机号。但每次工作人员给随的号都不太满意,总感觉是导致与奖擦肩而过的原因,当然,开个玩笑了。然后就在想,作为一个开发,自己也可以写个大乐透机选脚本,而且还能在枯燥的代码中找点乐趣

先上效果图
在这里插入图片描述

HTML

    <div class="box">
        <div class="content">
            <h3>客官, 来两注?</h3>
        </div>
        <div class="button">
            <input type="button" value="随机五注" onclick="fiveNumStr()">
        </div>
    </div>

JavaScript

javascript为原生写法,分两部分:功能方法、DOM操作

功能方法
    // 定义 randomNumber方法, 随机输出数组
    function randomNumber(num) {
        // 定义 strArr方法, 生成数组
        function strArr(num) {
            var numberAarry = []
            for (var i = 0; i < num; i++) {
                numberAarry[i] = i + 1
            }
            return numberAarry
        }
        // 获得数组
        var numberAarry = strArr(num)
        // 将数组元素随机排序
        numberAarry.sort(function () {
            return 0.5 - Math.random()
        })
        // 小于10,前面加0
        for (var i = 0; i < numberAarry.length; i++) {
            if (numberAarry[i] < 10) {
                numberAarry[i] = '0' + numberAarry[i]
            } else {
                numberAarry[i] = String(numberAarry[i])
            }
        }
        return numberAarry
    }
DOM操作
    // 用 fiveIsClick 限制用户频繁点击按钮
    var fiveIsClick = true
    function fiveNumStr() {
        if (fiveIsClick) {
        	// 设为false, 不可再次点击
            fiveIsClick = false
            var content = document.getElementsByClassName('content')[0]
            var innerText = content.getElementsByClassName('context')
            var ulNode = content.getElementsByTagName('ul')[0]
            // 先删除已创建的ul及其字节点, 再新增
            // 为什么要删除再添加节点呢, 是因为不增删节点只改变数字虽然渲染更快, 但是区别太小, 失去了动态效果
            // 当然, 如果你不需要删除再添加节点也行, 以下代码稍改动一下就好了
            if (ulNode) {
                content.removeChild(ulNode)
            }
            var ul = document.createElement('ul')
            // 用ul节点长度判断是否存在ul
            var ulLength = content.getElementsByTagName('ul').length
            var index = 0 
            // 计时器,每隔0.5秒新增一组
            var interval = setInterval(function() {
                index ++
                if (ulLength < 1) {
                    var li = document.createElement('li')
                    li.setAttribute('class','context')
                    ul.appendChild(li)
                    content.appendChild(ul)
                    // 遍历li节点
                    var context = document.getElementsByClassName('context')[index - 1]
                    // 得到顺序被打乱的前区35个数字数组
                    var randomLeft = randomNumber(35)
                    // 大乐透前区数组
                    var leftNum = [randomLeft[0], randomLeft[1], randomLeft[2], randomLeft[3], randomLeft[4]]
                    // 从小到大排序
                    leftNum.sort(function (a, b) {
                        return a - b
                    })
                    // 得到顺序被打乱的后区12个数字数组
                    var randomRight = randomNumber(12)
                    // 大乐透后区数组
                    var rightNum = [randomRight[0], randomRight[1]]
                    rightNum.sort(function (a, b) {
                        return a - b // 从小到大排序
                    })
                    // 节点模版,用于给每个球添加样式
                    var spanNode = "<span>" + leftNum[0] + "</span>" + "<span>" + leftNum[1] + "</span>" + "<span>" + leftNum[2] + "</span>"
                        + "<span>" + leftNum[3] + "</span>" + "<span>" + leftNum[4] + "</span>" + "<span>" + rightNum[0] + "</span>" + "<span>" + rightNum[1] + "</span>"
                    // 节点已添加,再添加spanNode节点模版
                    context.innerHTML = spanNode
                    // li节点数量达到5个,就停止计时器
                    if (index >= 5) {
                        clearInterval(interval)
                    }
                }
            }, 500)
            // 阻止按钮重复点击,间隔3秒
            setTimeout(function() {  
                fiveIsClick = true
            }, 3000)
        }
    }

CSS

    body,ul,li {
        margin: 0;
        padding: 0;
        list-style: none;
    }
    .box {
        height: 600px;
        background: rgba(216, 205, 205, 1);
    }
    .content {
        height: 70%;
        padding-top: 100px;
        text-align: center;
    }
    .context {
        margin: 20px 0;
    }
    .context span {
        display: inline-block;
        width: 30px;
        height: 30px;
        line-height: 30px;
        font-size: 14px;
        border-radius: 50%;
        color: #fff;
        background: rgba(192, 42, 42, 1);
        margin-right: 15px;
    }
    .context span:nth-child(5) {
        margin-right: 30px;
    }
    .context span:nth-child(7) {
        margin-right: 0;
    }
    .context span:nth-child(6),.context span:nth-child(7) {
        background: rgba(47, 40, 153, 1);
    }
    .button {
        width: 100%;
    }
    .button input {
        width: 180px;
        height: 40px;
        line-height: 40px;
        display: block;
        margin: 0 auto;
        background: rgba(192, 42, 42, 1);
        color: #fff;
        font: normal 400 14px '微软雅黑';
        border-radius: 5px;
        outline: none;
    }
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值