转盘抽奖

在线转盘抽奖:自定义选项与权重,缓出动画随机抽取,支持抽中后移除与历史记录。

一行写一个选项,写成「选项,权重」可以调整中奖概率,权重省略时按 1 计算。

转盘预览

使用说明

  1. 在选项列表里一行写一个选项,需要区分概率时写成「选项,权重」,例如「一等奖,1」。
  2. 权重越大,扇区面积越大,被抽中的机会也越多。省略权重时按 1 计算。
  3. 点「开始抽奖」或按空格键,转盘缓出旋转三到五秒,最后停在一个随机扇区上。
  4. 结果会显示在下方,中奖扇区同时高亮,点「复制结果」即可复制到剪贴板。
  5. 勾选「抽中后移除该选项」,中奖的选项会自动从列表里消失,适合连续抽取不重复的场景。

常见问题

抽奖结果是怎么产生的?
程序先按权重随机选出中奖序号,再计算转盘要转多少圈才能停在该扇区上。随机数来自 window.crypto.getRandomValues,得到 32 位整数后换算成 0 到 1 之间的小数。全部计算都在浏览器本地完成,不上传任何数据。
权重和扇区面积是什么关系?
扇区角度按权重比例分配。以权重 1、3、6 为例,三个扇区分别占总角度的十分之一、十分之三和十分之六。中奖概率与面积比例一致,看起来和算出来的结果相同。
「抽中后移除」有什么用?
勾选后中奖选项会从列表里删掉,转盘随即重画,已经抽中的结果不会再次出现。剩余选项少于两个时按钮会自动禁用,避免无效抽取。
选项和历史会上传到服务器吗?
不会。选项文本、抽奖结果与最近五条历史都只保存在当前页面的内存中,刷新或关闭页面就会清空,既不发送到服务器,也不写入本地存储。

使用步骤

  1. 填写选项与权重

    在文本框里一行写一个选项,需要区分概率时写成「选项,权重」,例如「一等奖,1」。权重省略时按 1 计算,扇区面积随权重变化。

  2. 开始旋转并等待停稳

    点「开始抽奖」或按空格键,转盘会旋转三到五秒。速度由快变慢,最后停在按权重抽出的扇区上并高亮显示。

  3. 复制中奖结果

    结果区显示中奖选项的完整文字,扇区内的长文本会被截断。点「复制结果」把中奖选项复制到剪贴板,方便粘贴到聊天窗口或表格里。

  4. 用移除模式连续抽取

    勾选「抽中后移除该选项」,每次抽完后中奖选项自动从列表消失,转盘重画。剩余选项少于两个时开始按钮禁用,避免无效抽取。

  5. 重置选项与清空历史

    点「重置选项」恢复初始列表,点「清空历史」删除最近五条记录。历史只保存在当前页面内存里,刷新页面后自然消失。

工具详细介绍

转盘抽奖把决定权交给随机数,适合午餐选择、课堂点名、直播抽奖和团建分组。选项一行一个,写成「选项,权重」就能调整概率,权重 1 与权重 3 的扇区角度是一比三,面积与真实概率保持一致。转盘用 canvas 绘制,颜色取自站点主题变量,跟随浅色与深色模式变化。长选项会在扇区内截断,完整文字显示在下方结果区,抽完可以一键复制。

旋转动画使用 requestAnimationFrame 配合缓出曲线,时长三到五秒。转速由快变慢,停在哪个扇区由权重随机决定,停稳后该扇区高亮。随机数来自浏览器内置的加密安全随机源,权重与扇区比例对应,抽取过程公平且可复核。开启「抽中后移除」后,中奖选项会从列表删除,转盘随即重画。剩余选项少于两个时自动禁用开始按钮,适合不重复的连续抽取。

原理与背景

按权重抽取的常见做法是先把所有选项的权重相加,得到总权重。再在零到总权重之间取一个随机小数,然后依次减去每个选项的权重,第一个减成负数的位置就是中奖选项。整个过程只用一次随机数,耗时与选项数量成正比。扇区角度按同样的比例分配,视觉面积与真实概率一一对应。随机小数由 32 位随机整数除以二的三十二次方得到,取值空间足够大,权重差异很小的选项也能分出胜负。

旋转动画的难点是让转盘恰好停在抽中的扇区上。实现时先算出该扇区中点在转盘坐标系里的角度。接着求出指针指向它所需的旋转角,再加上若干整圈作为总位移。最后用缓出曲线在固定时长内插值,圈数取四到六圈,时长三到五秒,看起来接近真实的转盘减速。系统开启减少动态效果时,工具把时长缩短到不足半秒,圈数减到一圈,结果不变,只是动画更短。

典型使用场景

  1. 直播与活动抽奖

    抽奖环节把奖项与权重填进列表,一等奖权重 1、二等奖权重 3、谢谢参与权重 10。开启抽中后移除,中奖者不会重复出现,历史记录留档方便复盘,投影到大屏上观众也能看清停稳过程。

  2. 团队午餐与值班分配

    午餐吃什么、谁去拿快递、周末谁值班这类小事,把候选写成列表直接转一次。想照顾多数人的偏好就给常去的店更高权重,抽完复制结果发到群里,省去来回讨论的时间。

  3. 课堂随机点名

    把学生名单一行一个粘进列表,权重统一按 1 计算,每次点开始就随机抽一位。抽中后移除能保证一节课里不重复点名,五条历史记录也方便核对是否漏抽。

使用技巧

  • 权重可以写小数,例如 0.5,用来表示概率只有一半的选项。
  • 粘贴名单时不必先整理,空行会被自动跳过,但整齐的列表更容易核对。
  • 扇区里的文字过长会截断,中奖后从结果区复制完整文字,不会丢信息。

注意事项

  • 权重不是百分比

    权重只表示相对比例,不必加起来等于 100。权重 1 与 1 是各占一半,权重 2 与 1 则是三分之二对三分之一。想按百分比设置,先把所有选项换算到同一基准再填写。

  • 长选项会被截断

    扇区空间有限,过长的文字在转盘上以省略号截断,完整内容显示在结果区。给选项取简短的名字,或者抽完后用复制按钮取回原文,都能避免误读。

  • 历史只在当前页面

    最近五条记录保存在页面内存里,刷新或关闭标签页就会清空,也不写入本地存储。需要留底的抽奖或点名,抽完先复制中奖结果,或者手动抄录到文档里。

相关工具