当前位置:首页 > JavaScript

js实现手机号码抽奖

2026-03-02 03:25:08JavaScript

实现手机号码抽奖的JavaScript方法

基础抽奖功能实现

使用Math.random()生成随机索引从手机号数组中选取中奖号码:

js实现手机号码抽奖

const phoneNumbers = ['13800138000', '13900139000', '15000150000'];
const winnerIndex = Math.floor(Math.random() * phoneNumbers.length);
const winnerNumber = phoneNumbers[winnerIndex];
console.log(`中奖号码: ${winnerNumber}`);

防止重复中奖机制

使用Set数据结构记录已中奖号码,避免重复抽取:

js实现手机号码抽奖

const drawnNumbers = new Set();
function drawLottery() {
  const availableNumbers = phoneNumbers.filter(num => !drawnNumbers.has(num));
  if (availableNumbers.length === 0) return "所有号码已抽完";

  const winner = availableNumbers[Math.floor(Math.random() * availableNumbers.length)];
  drawnNumbers.add(winner);
  return winner;
}

可视化抽奖动画效果

添加旋转动画模拟抽奖过程:

function animateDraw(displayElement, duration = 3000) {
  let startTime = null;
  function frame(timestamp) {
    if (!startTime) startTime = timestamp;
    const progress = timestamp - startTime;
    const randomIndex = Math.floor(Math.random() * phoneNumbers.length);
    displayElement.textContent = phoneNumbers[randomIndex];

    if (progress < duration) {
      requestAnimationFrame(frame);
    } else {
      const finalWinner = drawLottery();
      displayElement.textContent = finalWinner || "抽奖结束";
    }
  }
  requestAnimationFrame(frame);
}

加权抽奖算法

根据权重值实现不同中奖概率:

const weightedNumbers = [
  { number: '13800138000', weight: 1 },
  { number: '13900139000', weight: 3 },
  { number: '15000150000', weight: 6 }
];

function weightedDraw() {
  const totalWeight = weightedNumbers.reduce((sum, item) => sum + item.weight, 0);
  let random = Math.random() * totalWeight;

  for (const item of weightedNumbers) {
    if (random < item.weight) return item.number;
    random -= item.weight;
  }
}

完整示例代码

<!DOCTYPE html>
<html>
<body>
  <div id="display">准备抽奖...</div>
  <button onclick="startDraw()">开始抽奖</button>

  <script>
    const numbers = ['13800138000', '13900139000', '15000150000'];
    const drawn = new Set();
    const display = document.getElementById('display');

    function startDraw() {
      animateDraw(display, 2000);
    }

    function animateDraw(element, duration) {
      let start = null;
      function frame(timestamp) {
        if (!start) start = timestamp;
        const progress = timestamp - start;
        element.textContent = numbers[Math.floor(Math.random() * numbers.length)];

        if (progress < duration) {
          requestAnimationFrame(frame);
        } else {
          const winner = drawWinner();
          element.textContent = winner || "所有奖品已抽完";
        }
      }
      requestAnimationFrame(frame);
    }

    function drawWinner() {
      const available = numbers.filter(n => !drawn.has(n));
      if (available.length === 0) return null;

      const winner = available[Math.floor(Math.random() * available.length)];
      drawn.add(winner);
      return winner;
    }
  </script>
</body>
</html>

注意事项

  • 移动端适配需添加viewportmeta标签
  • 大量数据时应使用Web Worker防止界面卡顿
  • 正式环境需后端验证中奖结果防止篡改
  • 遵守当地法律法规设置合理的奖品价值

以上实现可根据实际需求调整动画时长、奖品数量等参数,也可添加音效等增强用户体验。

标签: 手机号码js
分享给朋友:

相关文章

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 fun…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div c…