目录

1. 生成电话号码的函数

2. 随机生成电话号码的数组

3. 开始按钮模块

4. 关闭按钮模块

5. 展示中奖号码列表模块


是一个常见的互动活动,在线上线下的抽奖活动中都有出现过。

代码的主要功能是从一组随机生成的 11 位电话号码中,实现随机抽取号码直至列表为空,同时对已抽中的号码进行展示。该代码中主要包括如下要点:

1. 生成电话号码的函数

function generatePhoneNumber() {
  var phoneNumber = "1";
  for (var i = 0; i < 9; i++) {
    phoneNumber += Math.floor(Math.random() * 10);
  }
  return phoneNumber;
}
 

这部分JavaScript代码返回一个随机生成的 11 位电话号码,该电话号码通过循环生成 1–9 的数字,最后前加上数字“1”即成为 11 位的电话号码。

2. 随机生成电话号码的数组

var phoneNumberArr = [];
for (var i = 0; i < 11; i++) {
  phoneNumberArr.push(generatePhoneNumber());
}


这段 JavaScript 代码通过调用 generatePhoneNumber() 函数,向数组 phoneNumberArr 中添加随机生成的 11 个电话号码。准备将这组电话号码用于随机抽奖。

3. 开始按钮模块

const start = document.querySelector('.start');
start.addEventListener('click', function () {
  if (phoneNumberArr.length <= 1) {
    start.disabled = true;
    end.disabled = true;
    return;
  }
  timerId = setInterval(function () {
    random = Math.floor(Math.random() * phoneNumberArr.length);
    qs.innerHTML = phoneNumberArr[random];
  }, 100);
});

当用户启用开始按钮时,随机抽选手机号码的定时器将启动,定时器每次迭代都会生成一个随机索引(random)。由 phoneNumberArr 数组的长度随机生成 (Math.floor(Math.random()*phoneNumberArr.length)),页面展示抽中的随机号码(qs.innerHTML = phoneNumberArr[random]) 。最后当 phoneNumberArr 中未选出号码、只剩下1个或0个手机号码,界面上的开始按钮(start)和结束按钮(end)将被禁用(灰色显示),无法启用。

4. 关闭按钮模块

const end = document.querySelector('.end');

end.addEventListener('click', function () {
  clearInterval(timerId); // 停止定时器
  selectedArr.push(phoneNumberArr.splice(random, 1)[0]); // 记录中奖号码并清除已选编号
  showSelectedArr(); // 展示已选的中奖号码
});

停用关闭按钮 (end) 显示所选的局部中奖号码列表。其主要功能回收当random中發現產生範圍內的索引时,移除该随机号码 push() 例 selectedArr 数组中。换句话说( imageView:修改)是从 phoneNumberArr 中用 splice() 方法,移除该随机号码。

selectedArr 数组包含所有抽中的随机电话号码,并与方法showSelectedArr()一起使用,该方法输出所有抽奖号码和展现当发现的中奖号码。同时,使 selectedArr 数组的长度保持不变,防止随机号码重复抽中。因此,在关闭函数上加入 (phoneNumberArr.splice(random, 1)[0]) 之使选择的号码从源 List上清除,防止抽选重复号码。

5. 展示中奖号码列表模块

function showSelectedArr() {
  const list = document.querySelector('.list');
  list.innerHTML = '';
  for (var i = 0; i < selectedArr.length; i++) {
    const item = document.createElement('div');
    item.innerText = selectedArr[i];
    list.appendChild(item);
  }
}

JS 代码展示合并中奖电话号码滚动式表单的内容。当单击界面上的 add-button 按钮时,用语义上与 item 类别相似的 item 文本部件以每次 (i++) 迭代的方式生成并 insertHTMLBack() 添加至列表(LI)元素。该列表放置在列样式(.list)下).

本文概述了具体的实现逻辑,其主要目的是通过生成固定长度的数组,进而轮流随机出设有手机号码的元素,并用 splice() 移除成为赢家的手机号码;通过 push() 添加至另一固定数组选项卡中,并展示已选择的中奖号码。稳步使用 showSelectedArr(), 退出(clearInterval) 后, showSelectedArr()使选中的号显示列表存储在页面中的指定区域。

具体代码如下:

<!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;
    }

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

    .list {
      color: red;
    }
  </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>
  <div class="selected">
    <span>获奖电话号码:</span>
    <div class="list"></div>
  </div>


  <script>
    // 随机生成11位电话号码的函数
    function generatePhoneNumber() {
      var phoneNumber = "1";
      for (var i = 0; i < 9; i++) {
        phoneNumber += Math.floor(Math.random() * 10);
      }
      return phoneNumber;
    }

    // 生成11位电话号码的数组
    var phoneNumberArr = []; // 存储所有电话号码
    var selectedArr = []; // 存储选中的电话号码
    for (var i = 0; i < 11; i++) { // 生成11个随机电话号码
      phoneNumberArr.push(generatePhoneNumber());
    }


    // 定时器的全局变量
    let timerId = 0;

    // 随机号要全局变量
    let random = 0;

    // 业务1.开始按钮模块
    const qs = document.querySelector('.qs');

    // 1.1 获取开始按钮对象
    const start = document.querySelector('.start');

    // 1.2 添加点击事件
    start.addEventListener('click', function () {
      if (phoneNumberArr.length <= 1) {
        start.disabled = true;
        end.disabled = true;
        return;
      }
      timerId = setInterval(function () {
        // 随机数
        random = Math.floor(Math.random() * phoneNumberArr.length);
        qs.innerHTML = phoneNumberArr[random];
      }, 100);
    });

    // 2. 关闭按钮模块
    const end = document.querySelector('.end');

    end.addEventListener('click', function () {
      clearInterval(timerId);
      selectedArr.push(phoneNumberArr.splice(random, 1)[0]);
      showSelectedArr();
    });

    // 展示所有中奖号码的函数
    function showSelectedArr() {
      const list = document.querySelector('.list');
      list.innerHTML = ''; // 清空获奖电话列表

      for (var i = 0; i < selectedArr.length; i++) {
        const item = document.createElement('div');
        item.innerText = selectedArr[i]; // 修改
        list.appendChild(item);
      }
    }
  </script>
</body>

</html>