当前位置:首页 > JavaScript

js 实现抽奖

2026-04-07 05:10:05JavaScript

实现抽奖功能的基本思路

抽奖功能的核心在于随机选择奖项,并展示抽奖过程以增加趣味性。以下是一个简单的实现方案:

// 奖项配置
const prizes = [
  { name: '一等奖', probability: 0.1 },
  { name: '二等奖', probability: 0.2 },
  { name: '三等奖', probability: 0.3 },
  { name: '谢谢参与', probability: 0.4 }
]

// 根据概率随机选择奖项
function drawPrize(prizes) {
  const random = Math.random()
  let cumulativeProbability = 0

  for (const prize of prizes) {
    cumulativeProbability += prize.probability
    if (random <= cumulativeProbability) {
      return prize
    }
  }

  return prizes[prizes.length - 1]
}

添加抽奖动画效果

为了让抽奖过程更生动,可以添加简单的动画效果:

function startDrawAnimation(element, duration = 3000) {
  let startTime = null
  const prizesList = prizes.map(p => p.name)

  function animate(timestamp) {
    if (!startTime) startTime = timestamp
    const progress = timestamp - startTime

    // 快速切换显示奖项
    const index = Math.floor(progress / 100) % prizesList.length
    element.textContent = prizesList[index]

    if (progress < duration) {
      requestAnimationFrame(animate)
    } else {
      // 动画结束,显示最终结果
      const result = drawPrize(prizes)
      element.textContent = result.name
    }
  }

  requestAnimationFrame(animate)
}

完整示例代码

<!DOCTYPE html>
<html>
<head>
  <title>抽奖Demo</title>
  <style>
    #result {
      font-size: 24px;
      margin: 20px;
      padding: 10px;
      border: 1px solid #ccc;
      min-height: 50px;
    }
    button {
      padding: 10px 20px;
      font-size: 16px;
      cursor: pointer;
    }
  </style>
</head>
<body>
  <div id="result">等待抽奖...</div>
  <button id="drawBtn">开始抽奖</button>

  <script>
    const prizes = [
      { name: '一等奖', probability: 0.1 },
      { name: '二等奖', probability: 0.2 },
      { name: '三等奖', probability: 0.3 },
      { name: '谢谢参与', probability: 0.4 }
    ]

    function drawPrize(prizes) {
      const random = Math.random()
      let cumulativeProbability = 0

      for (const prize of prizes) {
        cumulativeProbability += prize.probability
        if (random <= cumulativeProbability) {
          return prize
        }
      }

      return prizes[prizes.length - 1]
    }

    function startDrawAnimation(element, duration = 3000) {
      let startTime = null
      const prizesList = prizes.map(p => p.name)

      function animate(timestamp) {
        if (!startTime) startTime = timestamp
        const progress = timestamp - startTime

        const index = Math.floor(progress / 100) % prizesList.length
        element.textContent = prizesList[index]

        if (progress < duration) {
          requestAnimationFrame(animate)
        } else {
          const result = drawPrize(prizes)
          element.textContent = result.name
        }
      }

      requestAnimationFrame(animate)
    }

    document.getElementById('drawBtn').addEventListener('click', function() {
      const resultElement = document.getElementById('result')
      resultElement.textContent = '抽奖中...'
      startDrawAnimation(resultElement)
    })
  </script>
</body>
</html>

高级功能扩展

  1. 概率调整功能

    function adjustProbabilities(prizes) {
    // 确保概率总和为1
    const total = prizes.reduce((sum, prize) => sum + prize.probability, 0)
    return prizes.map(prize => ({
     ...prize,
     probability: prize.probability / total
    }))
    }
  2. 多次抽奖限制

    
    let drawCount = 0
    const maxDraws = 3

document.getElementById('drawBtn').addEventListener('click', function() { if (drawCount >= maxDraws) { alert('抽奖次数已达上限') return }

drawCount++ const resultElement = document.getElementById('result') resultElement.textContent = 抽奖中... (剩余${maxDraws - drawCount}次) startDrawAnimation(resultElement) })

js 实现抽奖


3. 中奖记录保存
```javascript
const drawHistory = []

function saveDrawResult(result) {
  drawHistory.push({
    prize: result.name,
    time: new Date().toLocaleString()
  })
  console.log('抽奖记录:', drawHistory)
}

标签: js
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

利用js实现

利用js实现

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

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…