跳至主要內容

更新日誌

已發布的功能與底層調整

轉盤本身

pre-1.0 · 2026-08-29

12 個專用頁面、可拖曳的轉盤、音效、分享連結,以及停止不必要重繪的渲染引擎。

抽獎機制

  • 旋轉前已抽出結果。 旋轉時使用 crypto.getRandomValues 配合拒絕採樣法選出獲獎選項,動畫隨後精準導向該選項。用力滑動只會帶來更長的旋轉時間,絕不會改變抽獎結果。
  • 公平性說明頁面。 演算法就是頁面上的展示文案——頁面上展示的程式碼就是實際執行的程式碼。
  • 權重與重複項。 選項的權重即為其在抽獎中所佔的份額,並直接顯示為實際百分比。文字相同的兩個選項仍會保持獨立,列表中會標註重複次數,而非悄悄將其合併。

轉盤功能

  • 12 個專屬頁面。 每個頁面打開時都包含預設內容,並具備其他頁面沒有的專屬控制項——數字範圍、字母表、分組工具、班級名單、抽獎記錄。
  • 拖曳並釋放。 釋放時的滑動速度會轉化為額外的旋轉圈數。旋轉中點擊可提前停止;按下空格鍵或 Enter 鍵即可直接旋轉,無需尋找按鈕。
  • 聲音與反饋。 與指針越過分割線精確同步的滴答聲、落定提示音、可取消的倒數計時,以及手機震動——均可獨立開關,並清楚顯示當前啟用狀態。
  • 展示模式。 隱藏次要控制項,轉盤尺寸擴大至螢幕短邊的 70% 以上,結果顯示在高對比面板中,方便整個房間的人清楚看見。
  • 兩種額外的抽獎呈現方式。 老虎機滾軸與卡片橫軸,適用於不適合圓形轉盤的場景。

保存與分享

  • 分享連結即為即時快照。 轉盤資料直接編碼至 URL 中,因此連結永不過期,後續對轉盤的修改也不會影響同事打開時看到的內容。
  • 已存轉盤、旋轉歷史與權重預設,均保存在本地瀏覽器中,並可匯出為檔案以便轉移至其他裝置。由於沒有帳戶系統,該檔案是在裝置間遷移資料的唯一途徑。

底層優化

  • 渲染引擎遷移至 Canvas。 盤面僅在圖形變更時繪製一次,旋轉過程透過元素的 CSS transform 完成,因此旋轉時完全無需每幀重新繪製。選項文字在旁邊保留為真實的隱藏列表——Canvas 只是像素點,螢幕閱讀器需要真實文本進行讀取。
  • 支援減少動態效果。 當系統開啟 prefers-reduced-motion: reduce 時,會直接跳過旋轉過程並立即宣告結果。測試顯示三家競爭對手對此均完全未做處理。
  • 即時宣告結果。 結果會輸出至 live region 作為可選取文字,而非僅僅繪製在轉盤上的像素。

回歸純粹的工具網站

pre-1.0 · 2026-08-27

徹底移除本專案起步時的 SaaS 架構,而非僅僅將其關閉。

TossWheel 最初基於一個 SaaS 入門模板構建,而今天的大部分工作都是在做減法。

移除的項目

  • 帳戶、控制面板、管理後台與設定。 這裡沒有任何需要登入的內容,也沒有登入後的隱藏功能,因此這些介面已被徹底刪除而非只是關閉——未啟用的功能開關仍會把背後的程式碼打包發布。
  • 資料庫、物件儲存與鍵值快取。 Worker 現在完全不包含任何綁定資源。清單保存在您的瀏覽器中,分享的轉盤則直接封裝在連結內。
  • 支付系統、電子報與 AI 相關介面。 這些在此處毫無用處。

決定的架構

  • 方案 A,「純粹儀器」風格。 我們建立了三個高擬真原型並選定其中之一:轉盤居左、清單在旁、操作按鈕位於轉盤下方,且轉盤是頁面上唯一的彩色元素。
  • 上線前索引開關。 在上線清單核對完畢之前,每個回應均帶有 noindex,避免未完成的頁面先被搜尋引擎收錄,之後又要手動取消索引。

記錄這些決定的原因

日後重新引入資料庫或登入系統將是一次產品架構的重大變更,而非單純的實作細節。正是這項架構約束,保證了此處的轉盤無需帳戶,且不會在伺服器端保留您的清單副本。