当前位置:首页 > 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实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js 实现分页

js 实现分页

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

js实现抽奖

js实现抽奖

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

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…