写了一个抽奖功能的小demo 练一下随机数,点击循环到随机的数字,上代码。

 实现逻辑的具体步骤

1.    在HTML部分,有一个包含抽奖元素的容器div和一个用于显示抽奖结果的h1元素。

2.    CSS部分定义了容器div和抽奖元素的样式,以及一些其他样式。

3.    JavaScript部分首先使用querySelectorAll()方法选择所有的抽奖元素,并将其存储在变量div中。

4.    接下来,使用querySelector()方法选择开始抽奖的按钮,并将其存储在变量start中。

5.    使用querySelector()方法选择h1元素,并将其存储在变量h1中。

6.    定义一个变量flag,用于标记抽奖是否正在进行中。

7.    给开始抽奖的按钮添加一个点击事件监听器。当按钮被点击时,会执行一个回调函数。 8.    在回调函数中,首先检查flag变量的值。如果flag为true,说明抽奖正在进行中,直接返回,不执行后续代码。

9.    将flag设置为true,表示抽奖开始。

10.    禁用开始抽奖的按钮,防止重复点击。

11.    使用Math.random()方法生成一个随机数,并使用Math.ceil()方法向上取整,得到一个1到8之间的整数,将其存储在变量idx中。这个数表示中奖的位置。

12.    定义一个变量i,用于追踪当前抽奖元素的位置。

13.    使用setInterval()方法创建一个定时器,每100毫秒执行一次回调函数。

14.    在回调函数中,首先移除所有抽奖元素的active类,以清除之前的样式。

15.    将当前抽奖元素添加active类,以突出显示。

16.    将i加1,以便下一次循环时显示下一个抽奖元素。

17.    检查i是否等于idx,如果是,则表示抽奖结束。清除定时器,启用开始抽奖的按钮,将flag设置为false。

18.    最后,将h1元素的innerHTML属性设置为抽奖结果的文本,使用模板字符串将中奖位置插入到文本中。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    * {
        padding: 0;
        margin: 0;
    }

    .active {
        background-color: red;
    }

    button {
        width: 100%;
        height: 100%;
    }

    .box {
        width: 482px;
        height: 486px;
        position: relative;
        margin: 10px auto;
        box-shadow: 0 0 4px 6px rgb(95, 92, 92);
    }

    .box div {
        width: 160px;
        height: 160px;
        border: 1px solid rgb(218, 18, 18);
        position: absolute;
    }

    .box div:nth-child(2) {
        left: 50%;
        transform: translateX(-50%);
        border-right: 0;
        border-left: 0;

    }

    .box div:nth-child(3) {
        right: 0;
    }

    .box div:nth-child(4) {
        right: 0;
        top: 50%;
        transform: translateY(-50%);
        border-top: 0;
    }

    .boox {
        width: 160px;
        height: 160px;
        border: 1px solid rgb(218, 18, 18);
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
        border-right: 0;
        border-left: 0;
        border-top: 0;
    }

    .box div:nth-child(6) {

        border-top: 0;

        right: 0;
        bottom: 0;
    }

    .box div:nth-child(7) {
        bottom: 0;
        left: 50%;
        border-right: 0;
        border-left: 0;
        border-top: 0;

        transform: translateX(-50%);

    }

    .box div:nth-child(8) {

        left: 0;
        bottom: 0;
        border-top: 0;


    }

    .box div:nth-child(9) {
        left: 0;
        top: 50%;
        transform: translateY(-50%);
        border-top: 0;
        border-right: 0;
    }

    .active {
        background-color: red;
    }

    h1 {
        text-align: center;
    }

    button {
        border: 3px solid rgb(44, 222, 228);

    }
</style>

<body>
    <h1 id="h1">你还没开始抽奖哦!点击下面抽奖吧</h1>
    <br>
    <div class="box">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <ul class="boox"><button class="start">开始抽奖</button></ul>
        <div>5</div>
        <div>6</div>
        <div>7</div>
        <div>8</div>
    </div>
</body>
<script>
    var div = document.querySelectorAll('.box div')
    var start = document.querySelector('.start')
    var h1 = document.querySelector('#h1')
    // 获取元素
    var flag = false
    start.onclick = function () {

        if (flag) {
            return
        }
        flag = true
        start.disabled = true
        var idx = Math.ceil(Math.random() * 24) // 的1-8的数字
        // ceil() 方法将数字向上舍入为最接近的整数,并返回结果
        //Math.random() 函数返回一个浮点数,  伪随机数在范围从0到小于1
        var i = 0
        let js = setInterval(() => {
            for (let i = 0; i < div.length; i++) {
                div[i].classList.remove('active')
            }
            div[i % 8].classList.add('active')
            i++
            if (idx == i) {
                clearInterval(js)
                start.disabled = false
                flag = false
            }

        }, 100);
        h1.innerHTML = `恭喜你中了${idx % 8 ? idx % 8 : '8'}等奖`
    }
</script>

</html>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个示例的随机数HTML代码,可以根据您的具体要求进行调整: ```html <!DOCTYPE html> <html> <head> <title>随机数生成器</title> </head> <body> <h1>随机数生成器</h1> <form> <label for="num">生成个数:</label> <input type="number" id="num" name="num" value="10"><br><br> <label for="range">随机数范围:</label> <input type="text" id="range" name="range" placeholder="例如:1-100"><br><br> <label for="unique">是否允许重复:</label> <input type="checkbox" id="unique" name="unique"><br><br> <input type="button" value="生成随机数" onclick="generateRandomNumbers()"> </form> <h2>随机数列表:</h2> <ul id="random-numbers"></ul> <script> function generateRandomNumbers() { // 获取表单中的参数 var num = parseInt(document.getElementById("num").value); var range = document.getElementById("range").value.trim(); var unique = document.getElementById("unique").checked; // 解析随机数范围 var min, max; if (range) { var parts = range.split(/[^\d\-]/); min = parseInt(parts[0]); max = parseInt(parts[1]); } else { min = 0; max = 100; } // 生成随机数数组 var numbers = []; while (numbers.length < num) { var number = Math.floor(Math.random() * (max - min + 1)) + min; if (!unique || numbers.indexOf(number) === -1) { numbers.push(number); } } // 清空列表并添加新的随机数 var list = document.getElementById("random-numbers"); list.innerHTML = ""; for (var i = 0; i < numbers.length; i++) { var li = document.createElement("li"); li.textContent = numbers[i]; list.appendChild(li); } } </script> </body> </html> ``` 该代码包含以下功能: - 生成个数:通过输入框输入需要生成的随机数个数。 - 随机数范围:通过输入框来输入随机数的范围,可以包含任意符号,例如:1-100、0~100、-100到100等等。 - 是否允许重复:通过复选框来控制是否允许生成重复的随机数。 - 生成随机数:通过点击按钮来生成随机数。 - 随机数列表:通过无序列表来展示生成的随机数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有两把刷子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值