DSH 開屏動畫插件介紹

前言

DeepSeek Harness (DSH) 採用「一切皆插件」的架構。在應用啓動階段,爲了提供更完整的啓動體驗或品牌展示,通常需要自定義啓動畫面。dsh-splash-screen 是一個純插件實現的開屏動畫,提供全屏啓動動畫,支持跳過,並可在側欄「插件」頁開關。

核心功能

該插件主要包含以下特性:

  • 全屏啓動動畫:提供全屏的啓動展示,覆蓋默認的啓動殼。
  • 可跳過:支持通過點擊任意處、按鍵、觸屏、滾輪或點擊右下角 SKIP 按鈕跳過。
  • 純插件實現:不依賴應用本體修改,通過插件機制集成。
  • 側欄開關:可在側欄「插件」頁直接控制插件的啓用與禁用。
  • 音效處理:音效默認關閉,採用運行時合成(不依賴外部音頻文件),並支持在右下角 SOUND 按鈕開啓。
  • 無障礙支持:包含 role="progressbar" 與 aria-valuenow,狀態變化支持 aria-live 播報,並尊重 prefers-reduced-motion 偏好設置。
  • 兩半結構:採用 Node 半和 Client 半的結構,通過注入行進行通信。
  • 會話控制:同頁面會話內只播一次。

安裝

安裝前請確保已安裝 DSH(桌面版或瀏覽器版)。dsh plugin 會通過 pnpm 將倉庫安裝到指定 profile。

安裝命令

桌面版:

dsh plugin --profile desktop add "git+https://github.com/52baihehhh-ai/dsh-splash-screen.git"

瀏覽器版:

dsh plugin --profile web add "git+https://github.com/52baihehhh-ai/dsh-splash-screen.git"

安裝完成後,桌面端需要重啓一次應用。這是因爲 node 半的注入行是在宿主啓動時收集並下發的,重啓後注入行纔會生效。

結構說明

該插件採用兩半結構實現,確保在宿主加載機制下正常工作。

Node 半:封面與注入

Node 半負責在應用啓動早期進行覆蓋,防止默認啓動殼閃現。它使用官方的結構化注入行向 index 注入:

  • 樣式注入:同底色的封面樣式,覆蓋默認啓動畫面。
  • 腳本注入:立刻鋪出封面節點(底色與開屏舞臺一致),並負責在 Client 半掛載或超時後移除自身。

Client 半:動畫本體

Client 半負責具體的動畫邏輯,通過懶加載 CJS 模塊加載。它將自己掛載到 shell.overlay 槽位,使用 position: fixed 鋪滿屏幕。樣式注入使用單個 <style> 標籤,並使用 sp- 前綴類名以避免與宿主界面衝突。

使用方法

跳過動畫

在動畫播放期間,可以通過以下任意方式跳過:
* 鼠標點擊任意處
* 按任意鍵
* 觸屏操作
* 滾動滾輪
* 點擊右下角的 SKIP 按鈕

音效控制

音效默認關閉。點擊右下角的 SOUND 按鈕可開啓,偏好設置會保存在 localStorage 中。音效爲運行時合成,不受瀏覽器自動播放策略影響。

視覺預覽

在本地開發或驗證效果時,無需運行 DSH。用瀏覽器直接打開倉庫裏的 preview/index.html 即可查看獨立效果。

已知邊界與注意事項

  • 無「應用啓動即顯示」:插件無法覆蓋宿主自帶的 [data-dsh-boot] 啓動殼。它覆蓋的是「窗口出現 → 界面掛載 → 動畫結束」這一段。
  • 注入行生效時機:新增或修改注入行(如修改 dsh.profile.bundles)後,桌面端必須重啓應用才能生效。
  • 瀏覽器端刷新:對於瀏覽器版 DSH,刷新頁面即可使注入行和動畫生效。
  • 貼圖處理:插件貼圖(如立繪)不內聯成 data URI,以避免撐爆注入腳本或阻塞主線程。

開發與定製

本地開發

無運行時依賴,需要 Node ≥ 20.11。源文件位於 src/splash.js,構建產物爲 client.js 和 index.js。

node scripts/build.mjs          # 構建 client.js + index.js
node scripts/build.mjs --check  # 只比對不寫盤

替換立繪

如需替換立繪,將圖片重命名爲 art.webp 並保持文件名不變即可。插件運行時會按文件名由宿主路由按需加載,不會將圖片內聯成 data URI。

許可證

MIT License。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜