JS:随机点名综合案例

文章描述了一个使用JavaScript和HTML实现的随机点名功能,包括随机抽取不重复的名字、定时更新显示、以及在只剩一人时自动结束的功能。

需求:

1、随机点名

2、不能重复出现已经被抽取的名字

3、当剩下最后一个人的名字时不再抽取

部分html代码:

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

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

    h2 {
      text-align: center;
    }

    .box {
      width: 600px;
      margin: 50px auto;
      display: flex;
      font-size: 25px;
      line-height: 40px;
    }

    .qs {

      width: 450px;
      height: 40px;
      color: red;

    }

    .btns {
      text-align: center;
    }

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

<body>

  <h2>随机点名</h2>
  <div class="box">
    <span>名字是:</span>
    <div class="qs">这里显示姓名</div>
  </div>
  <div class="btns">
    <button class="start">开始</button>
    <button class="end">结束</button>
  </div>

 
</body>

</html>

JavaScript部分代码:

 <script>
    // 点击开始按钮随机抽取数组的一个数据,放到页面中
    // 点击结束按钮删除数组当前抽取的一个数据
    // 当抽取到最后一个数据的时候,两个按钮同时禁用,(写点开始里面,只剩最后一个数据不用抽了)
    // 核心:利用定时器快速展示,停止定时器结束展示

    const nameArr = ['zhang', 'liu', 'li', 'zhao']
    // 业务1开始按钮模块
    const qs = document.querySelector('.qs')
    const start = document.querySelector('.start')
    let n = 0
    let random = 0
    // 添加点击事件
    start.addEventListener('click', function () {
      // 随机数

      n = setInterval(function () {
        random = parseInt(Math.random() * nameArr.length)
        qs.innerHTML = nameArr[random]
      }, 50)

      // 如果数组里面只剩一个元素就不用再开始了
      if (nameArr.length === 1) {
        start.disabled = true
        end.disabled = true

      }

    })
    //获取结束按钮
    const end = document.querySelector('.end')


    end.addEventListener('click', function () {
      clearInterval(n)//删除定时器
      nameArr.splice(random, 1)//已经被抽到的名字删掉
    })

  </script>

为了实现 JavaScript 随机点名案例的不重复点名功能,可以采用以下优化方案。基本思路是在每次点名后,将已点过的名字从候选名单中移除,避免再次被点到。 以下是优化后的代码示例: ```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> <script> // 假设这是候选名单 let names = ["张三", "李四", "王五", "赵六", "孙七"]; let intervalId; const startBtn = document.querySelector('.start'); const endBtn = document.querySelector('.end'); const display = document.querySelector('.qs'); startBtn.addEventListener('click', function () { if (names.length === 0) { display.textContent = "所有名字已点完"; return; } intervalId = setInterval(function () { // 随机选择一个索引 let randomIndex = Math.floor(Math.random() * names.length); display.textContent = names[randomIndex]; }, 100); }); endBtn.addEventListener('click', function () { clearInterval(intervalId); if (names.length > 0) { let selectedName = display.textContent; // 从名单中移除已点过的名字 names = names.filter(name => name!== selectedName); } }); </script> </body> </html> ``` 在上述代码中,定义了一个 `names` 数组作为候选名单。点击“开始”按钮时,使用 `setInterval` 函数让名字快速滚动显示。点击“结束”按钮时,清除定时器,并将当前显示的名字从 `names` 数组中移除,这样下次就不会再点到该名字。当所有名字都点完后,显示提示信息“所有名字已点完”。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值