LibraTool logoLibraTool

免費擲硬幣 & 轉盤

翻轉虛擬硬幣、旋轉可自定義的轉盤或從選項列表中隨機選擇。使用瀏覽器的密碼學安全隨機數——不是可驗證的公開抽籤,所以應避免用於受管制的競賽。

載入後可離線使用

🔒 三種方式都使用瀏覽器的密碼學安全隨機數產生器:結果先選出,然後播放動畫——硬幣是真正的 50/50、轉盤旋轉到已選結果,選擇器無偏差。任何內容都不會離開你的裝置。這對於日常使用是公平的,但它不是可驗證的公開抽籤,所以應避免受管制競賽或高價值決定。

工作原理

三種模式——拋硬幣、轉盤和選項抽取——都使用瀏覽器內建的 Web Crypto API(crypto.getRandomValues)產生結果,然後完全在客戶端用 CSS 變換和 requestAnimationFrame 驅動動畫。全程不涉及伺服器。

  1. 1
    Web Crypto 選出結果
    在動畫開始之前,crypto.getRandomValues 會用一個加密隨機的 32 位整數填充 Uint32Array。取模運算將其對映到選項數量(正反面為 2,轉盤或抽取為 N),因此每個結果的機率完全相等。
  2. 2
    計算旋轉角度以停在結果上
    對於硬幣,程式碼計算在當前累計角度基礎上、使正確一面朝上所需的最短額外旋轉——正面為 0°,反面為 180°——再加上 5 整圈,使它看起來像真實的翻滾。轉盤也是如此:找到使中獎扇區轉到指標下方的角度偏移,加上 6 整圈,並加入少量隨機抖動,讓指標不會總是正好停在扇區中央。
  3. 3
    CSS 過渡和 requestAnimationFrame 驅動動畫
    硬幣和轉盤透過 CSS transform 動畫,對單一累計旋轉值應用 cubic-bezier 緩動曲線——角度設定後無需逐幀 JavaScript。選項抽取則使用 requestAnimationFrame:每一幀由按二次方增長的間隔決定是否移動醒目提示,形成老虎機式的減速,並總是停在預先確定的結果上。
  4. 4
    揭曉結果並記錄到會話歷史
    動畫結束時(硬幣 1.3 秒,轉盤 4.3 秒)setTimeout 觸發並將結果寫入狀態。硬幣模式保留最多 24 次拋擲的會話歷史及正反面計數。啟用了 prefers-reduced-motion 的使用者會完全跳過動畫,立即看到結果。

相關工具

常見問題