RANDOM:轻松教你用JS实现随机点名案例

博主主页技术分享菌

博主简介:专注于前端开发领域,旨在帮助初学者提升前端技能水平,分享技术资讯和实用教程。内容涵盖 HTML、CSS、JavaScript、前端框架(如 React、Vue、Angular 等)以及前端工程化等方面。我们将不断更新优质内容,为大家提供一场前端技术的盛宴,欢迎你的关注和参与。


前言

随机点名 是应用于教育、培训、会议等场合的互动工具,在实际的开发过程中也是经常使用,通过随机选取参与者发言、回答问题或参与活动,使得整个过程更加公平、有趣和活跃。


一、随机点名是什么?

随机点名 是一种公平、公正的选择参与者参与活动、发言或回答问题的方法。它可以通过软件或实体工具实现,使每个参与者都有相同的机会被选中。

二、功能实现

1.页面效果图

2.HTML部分

代码如下(示例):

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>随机点名</title>
</head>

<body>
    <div class="box">
        <h2>随机点名</h2>
        <div class="content">
            <span>名字是:</span>
            <div class="qs">幸运嘉宾</div>
        </div>
        <div class="btns">
            <button class="start">开始</button>
            <button class="end">结束</button>
        </div>
    </div>
</body>

</html>

3. CSS部分

代码如下(示例):

* {
            margin: 0;
            padding: 0;
        }

        h2 {
            text-align: center;
        }

        .box {
            margin: 100px auto;
            padding: 50px;
            width: 600px;
            background-color: rgb(156, 3, 3);
            background-image: url(./festival.jpg);
            background-position: center;
            background-size: cover;
            border: 5px solid gold;
            border-radius: 5px;
        }

        .content {
            display: flex;
            margin: 50px auto;
            width: 600px;
            font-size: 25px;
            text-align: center;
            line-height: 40px;
            color: goldenrod;
        }
        .content span {
            padding: 10px 0;
        }
        .qs {
            padding: 10px;
            width: 450px;
            height: 40px;
            background-color: #000;
            color: gold;
        }
        .btns {
            text-align: center;
        }

        .btns button {
            width: 120px;
            height: 35px;
            margin: 0 50px;
        }

4.JavaScrip部分

代码如下(示例):

// 数据数组
        const arr = ['马超', '黄忠', '赵云', '关羽', '张飞','曹操','孙权']
        // 业务1. 开始按钮模块
        // 定时器全局变量
        let timeId = 0
        // 随机号全局变量
        let random = 0
        // 1.1 获取姓名区域对象
        const uname = document.querySelector('.qs')
        // 1.2 获取开始按钮对象
        const start_btn = document.querySelector('.btns .start')
        // 1.3 添加点击事件
        start_btn.addEventListener('click', function () {
            // 开启定时器
            timeId = setInterval(function () {
                // 随机数
                random = Math.floor(Math.random() * arr.length)
                // console.log(arr[random]);
                uname.innerHTML = arr[random]
            }, 50)
            // 点击开始按钮,禁用开始按钮
            start_btn.disabled = true
            // 如果数组里面只有一个值、不需要抽取,直接禁用开始、结束按钮
            if (arr.length === 1) {
                // start_btn.disabled = true
                // end_btn.disabled = true
                start_btn.disabled = end_btn.disabled = true
            }
        })
        // 业务2. 结束按钮模块
        // 2.1 获取结束按钮对象
        const end_btn = document.querySelector('.btns .end')
        // 2.2 添加点击事件
        end_btn.addEventListener('click', function () {
            // 点击结束按钮,启用开始按钮
            start_btn.disabled = false
            // 关闭定时器
            clearInterval(timeId)
            // 结束,删除抽到的对应数组元素
            arr.splice(random, 1)
        })

JS业务模块主要分为两个模块:开始按钮模块、结束按钮模块

当我们做案例主要是先分析业务逻辑,再进行代码功能的编写

随机点名 主要是通过点击事件获取随机数作为数组的下标,然后通过点击开始按钮,开启  定时器,点击结束按钮关闭定时器

下面是随机点击的注意点:

定时器的变量、随机数的变量 是全局变量

当抽取到最后一个数据的时候,两个按钮同时禁用

不然继续抽就会出现 undefined

点击结束按钮删除数组当前抽取的一个数据 下次就不抽到,保证公平性

当点击开始按钮就需要给开始按钮禁用掉,点击结束按钮启用开始按钮

如果不进行禁用,用点击开始按钮,再次点击开始按钮就会出现bug

5.整体代码

代码如下(示例):

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>随机点名</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        h2 {
            text-align: center;
        }

        .box {
            margin: 100px auto;
            padding: 50px;
            width: 600px;
            background-color: rgb(156, 3, 3);
            background-image: url(./festival.jpg);
            background-position: center;
            background-size: cover;
            border: 5px solid gold;
            border-radius: 5px;
        }

        .content {
            display: flex;
            margin: 50px auto;
            width: 600px;
            font-size: 25px;
            text-align: center;
            line-height: 40px;
            color: goldenrod;
        }
        .content span {
            padding: 10px 0;
        }
        .qs {
            padding: 10px;
            width: 450px;
            height: 40px;
            background-color: #000;
            color: gold;
        }
        .btns {
            text-align: center;
        }

        .btns button {
            width: 120px;
            height: 35px;
            margin: 0 50px;
        }
    </style>
</head>

<body>
    <div class="box">
        <h2>随机点名</h2>
        <div class="content">
            <span>名字是:</span>
            <div class="qs">幸运嘉宾</div>
        </div>
        <div class="btns">
            <button class="start">开始</button>
            <button class="end">结束</button>
        </div>
    </div>
    <script>
        // 数据数组
        const arr = ['马超', '黄忠', '赵云', '关羽', '张飞','曹操','孙权']
        // 业务1. 开始按钮模块
        // 定时器全局变量
        let timeId = 0
        // 随机号全局变量
        let random = 0
        // 1.1 获取姓名区域对象
        const uname = document.querySelector('.qs')
        // 1.2 获取开始按钮对象
        const start_btn = document.querySelector('.btns .start')
        // 1.3 添加点击事件
        start_btn.addEventListener('click', function () {
            // 开启定时器
            timeId = setInterval(function () {
                // 随机数
                random = Math.floor(Math.random() * arr.length)
                // console.log(arr[random]);
                uname.innerHTML = arr[random]
            }, 50)
            // 点击开始按钮,禁用开始按钮
            start_btn.disabled = true
            // 如果数组里面只有一个值、不需要抽取,直接禁用开始、结束按钮
            if (arr.length === 1) {
                // start_btn.disabled = true
                // end_btn.disabled = true
                start_btn.disabled = end_btn.disabled = true
            }
        })
        // 业务2. 结束按钮模块
        // 2.1 获取结束按钮对象
        const end_btn = document.querySelector('.btns .end')
        // 2.2 添加点击事件
        end_btn.addEventListener('click', function () {
            // 点击结束按钮,启用开始按钮
            start_btn.disabled = false
            // 关闭定时器
            clearInterval(timeId)
            console.log(arr[random]);
            // 结束,删除抽到的对应数组元素
            arr.splice(random, 1)
            console.log(arr);
        })
    </script>
</body>

</html>

总结

以上就是今天要讲的内容,本文介绍了随机点名功能的实现,主要通过JS中点击事件、随机的生成、定时器的开始和关闭,文章有什么不对的地方,欢迎各位大佬指正~

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

技术分享菌

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

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

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

打赏作者

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

抵扣说明:

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

余额充值