轉盤不是動畫決定的:我怎麼設計一個更透明的線上抽籤
線上轉盤最容易讓人疑惑的是結果何時決定。這篇拆開 ToolNeko 轉盤的名單規則、選取順序、動畫、移除機制與隨機限制。
先回答最重要的問題:結果何時決定?
在 ToolNeko 的線上轉盤裡,結果不是動畫最後停下時才重新抽。
按下「轉一下」後,程式會先讀取目前仍有效的選項,選出一個結果,再計算該選項應該停在指針下方的位置。後面的旋轉、減速與音效是在呈現這次結果,不會在動畫結束時再抽第二次。
我特別把這件事寫出來,是因為動畫做得越熱鬧,越容易讓人以為「差一點轉到誰」代表某種機率變化。實際上,畫面只是把已選出的結果用轉盤方式呈現。
每一行是一個抽選單位
轉盤讀取名單時使用幾個直接的規則:
- 空白行會忽略。
- 最多讀取 100 個選項。
- 每個有效列在該輪有相同的選取機會。
- 相同文字出現兩次,會被當成兩個選項。
例如名單只有「小明、小美、小華」三列時,每一列約占三分之一。如果小明不小心貼了兩次,清單就會有四個抽選單位,小明合計占兩份。正式抽名字前,最好先檢查重複資料,而不是把畫面上相同的名稱當成一個人。
這也是為什麼我用「每一行都是一個選項」來描述,而不直接宣稱「每個人機率相同」。資料是否代表一人一列,仍要由建立名單的人負責確認。
動畫怎麼對上已選出的結果
選出結果後,程式會找出它在目前轉盤中的扇形位置,再加上數圈完整旋轉與一段隨機動畫時間,讓減速看起來自然。最後角度會對準同一個已選出的項目。
額外圈數、旋轉時間與音效節奏會變動,但不會更換結果。把「選取」與「呈現」分開,至少可以避免動畫結束時又做一次看不見的抽選。
抽中後移除,是下一輪的規則
開啟「抽中後移除」時,這一輪仍會先依目前有效名單選出結果。動畫結束後,結果加入紀錄,再從下一輪的有效選項中移除。
這個設定適合排出場順序、輪流分配任務或做不重複抽選。若是「今天吃什麼」這類每次都想從完整清單重新決定的情境,可以關閉移除。按下重置後,所有項目會回到轉盤,結果紀錄也會清空。
畫面最多顯示最近 12 筆結果,但複製按鈕會整理本輪完整紀錄。重新整理頁面後,抽選紀錄不會保留,因此不要把它當成不可竄改的正式稽核資料。
名單放在哪裡
目前輸入的名單與自行儲存的常用名單,會放在這台裝置的瀏覽器 localStorage。它不需要登入,也不會自動同步到其他裝置;清除瀏覽器資料時,名單可能一起消失。
工具的量測只記錄開始、完成與操作類型,不帶入名單文字或抽中結果。這讓我可以知道按鈕是否真的有人使用,又不需要看見使用者貼進去的姓名或選項。
「每列等機率」不等於正式抽獎認證
現在的轉盤使用瀏覽器 Math.random() 選取結果。它適合日常決定、小型活動、課堂互動或派對抽籤,但沒有可指定種子、第三方驗證或不可竄改紀錄,也不是密碼學安全的抽獎系統。
如果活動涉及高額獎項、法規、公開爭議,或必須在事後證明抽選過程,仍應另外準備參加資格、活動規則、名單版本、抽選紀錄與符合需求的機制。全螢幕轉盤看起來適合展示,不等於它本身就是完整的抽獎治理流程。
公開使用前的五個檢查
- 先去除重複、不符合資格或不應參加的項目。
- 對參與者說明一行就是一個抽選單位。
- 決定抽中後是否要從下一輪移除。
- 抽完立即複製本輪結果,另行保存需要的紀錄。
- 正式活動不要只依賴轉盤動畫當成公平或稽核證明。
如果你要的是有獎池、票券數量與 A~H 賞庫存的玩法,可以改用線上抽獎工具;它的任務與一般名字轉盤不同。若你發現轉盤規則與實際行為不一致,也可以從聯絡頁附上名單與操作步驟回報。