当前位置:首页 > 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实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…