当前位置:首页 > JavaScript

js抽奖实现

2026-04-05 08:13:46JavaScript

JavaScript 抽奖实现方法

核心思路
通过随机数生成器确定中奖结果,结合DOM操作实现动态效果。以下是两种常见实现方式:

方法一:基础随机抽奖
定义奖品数组,通过Math.random()生成随机索引:

js抽奖实现

const prizes = ['一等奖', '二等奖', '三等奖', '谢谢参与'];
function draw() {
  const index = Math.floor(Math.random() * prizes.length);
  return prizes[index];
}

方法二:带概率控制的抽奖
为每个奖品设置独立概率,使用区间判断:

const prizePool = [
  { name: 'iPhone', prob: 0.01 },
  { name: '耳机', prob: 0.1 },
  { name: '优惠券', prob: 0.3 },
  { name: '谢谢参与', prob: 0.59 }
];

function weightedDraw() {
  const rand = Math.random();
  let cumulativeProb = 0;
  for (const prize of prizePool) {
    cumulativeProb += prize.prob;
    if (rand < cumulativeProb) return prize.name;
  }
}

动态效果增强
添加转盘动画增强用户体验:

js抽奖实现

const startBtn = document.getElementById('start');
const resultDiv = document.getElementById('result');

startBtn.addEventListener('click', () => {
  let counter = 0;
  const interval = setInterval(() => {
    resultDiv.textContent = prizes[Math.floor(Math.random() * prizes.length)];
    if (counter++ > 20) {
      clearInterval(interval);
      resultDiv.textContent = weightedDraw();
    }
  }, 100);
});

注意事项

  • 概率总和应严格等于1
  • 移动端需添加触摸事件支持
  • 中奖结果建议通过后端验证防止篡改

扩展功能
可增加以下特性:

  • 奖品库存实时更新
  • 用户抽奖次数限制
  • 中奖历史记录展示
  • 响应式布局适配多设备

标签: js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

js实现投球

js实现投球

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