diff --git a/resources/js/effects.js b/resources/js/effects.js new file mode 100644 index 0000000..49466fc --- /dev/null +++ b/resources/js/effects.js @@ -0,0 +1,18 @@ +/** + * 文件功能:聊天室全屏特效 Vite 入口 + * + * 按原 public script 顺序加载所有全屏特效模块,让生产环境由 Vite 统一压缩、加 hash 并减少请求数。 + */ + +import "./effects/effect-sounds.js"; +import "./effects/effect-manager.js"; +import "./effects/fireworks.js"; +import "./effects/rain.js"; +import "./effects/lightning.js"; +import "./effects/snow.js"; +import "./effects/sakura.js"; +import "./effects/meteors.js"; +import "./effects/gold-rain.js"; +import "./effects/hearts.js"; +import "./effects/confetti.js"; +import "./effects/fireflies.js"; diff --git a/public/js/effects/confetti.js b/resources/js/effects/confetti.js similarity index 99% rename from public/js/effects/confetti.js rename to resources/js/effects/confetti.js index 7377f2e..c2a443a 100644 --- a/public/js/effects/confetti.js +++ b/resources/js/effects/confetti.js @@ -150,3 +150,5 @@ const ConfettiEffect = (() => { return { start }; })(); + +window.ConfettiEffect = ConfettiEffect; diff --git a/public/js/effects/effect-manager.js b/resources/js/effects/effect-manager.js similarity index 85% rename from public/js/effects/effect-manager.js rename to resources/js/effects/effect-manager.js index cdacf5b..767798c 100644 --- a/public/js/effects/effect-manager.js +++ b/resources/js/effects/effect-manager.js @@ -182,8 +182,8 @@ const EffectManager = (() => { _canvas = null; _current = null; // 通知音效引擎停止(兜底:正常情况下音效会自行计时结束) - if (typeof EffectSounds !== "undefined") { - EffectSounds.stop(); + if (typeof window.EffectSounds !== "undefined") { + window.EffectSounds.stop(); } if (playNext && _queue.length > 0) { @@ -260,8 +260,8 @@ const EffectManager = (() => { _bindClickStop(); // 同步触发对应音效 - if (typeof EffectSounds !== "undefined") { - EffectSounds.play(type); + if (typeof window.EffectSounds !== "undefined") { + window.EffectSounds.play(type); } let started = false; @@ -269,38 +269,38 @@ const EffectManager = (() => { try { switch (type) { case "fireworks": - started = _startEffect(typeof FireworksEffect !== "undefined" ? FireworksEffect : undefined, canvas, finishCurrent); + started = _startEffect(window.FireworksEffect, canvas, finishCurrent); break; case "wedding-fireworks": // 婚礼专属:双倍礼花,粉金浪漫配色,持续 12 秒 - started = _startEffect(typeof FireworksEffect !== "undefined" ? FireworksEffect : undefined, canvas, finishCurrent, "startDouble"); + started = _startEffect(window.FireworksEffect, canvas, finishCurrent, "startDouble"); break; case "rain": - started = _startEffect(typeof RainEffect !== "undefined" ? RainEffect : undefined, canvas, finishCurrent); + started = _startEffect(window.RainEffect, canvas, finishCurrent); break; case "lightning": - started = _startEffect(typeof LightningEffect !== "undefined" ? LightningEffect : undefined, canvas, finishCurrent); + started = _startEffect(window.LightningEffect, canvas, finishCurrent); break; case "snow": - started = _startEffect(typeof SnowEffect !== "undefined" ? SnowEffect : undefined, canvas, finishCurrent); + started = _startEffect(window.SnowEffect, canvas, finishCurrent); break; case "sakura": - started = _startEffect(typeof SakuraEffect !== "undefined" ? SakuraEffect : undefined, canvas, finishCurrent); + started = _startEffect(window.SakuraEffect, canvas, finishCurrent); break; case "meteors": - started = _startEffect(typeof MeteorsEffect !== "undefined" ? MeteorsEffect : undefined, canvas, finishCurrent); + started = _startEffect(window.MeteorsEffect, canvas, finishCurrent); break; case "gold-rain": - started = _startEffect(typeof GoldRainEffect !== "undefined" ? GoldRainEffect : undefined, canvas, finishCurrent); + started = _startEffect(window.GoldRainEffect, canvas, finishCurrent); break; case "hearts": - started = _startEffect(typeof HeartsEffect !== "undefined" ? HeartsEffect : undefined, canvas, finishCurrent); + started = _startEffect(window.HeartsEffect, canvas, finishCurrent); break; case "confetti": - started = _startEffect(typeof ConfettiEffect !== "undefined" ? ConfettiEffect : undefined, canvas, finishCurrent); + started = _startEffect(window.ConfettiEffect, canvas, finishCurrent); break; case "fireflies": - started = _startEffect(typeof FirefliesEffect !== "undefined" ? FirefliesEffect : undefined, canvas, finishCurrent); + started = _startEffect(window.FirefliesEffect, canvas, finishCurrent); break; default: console.warn(`[EffectManager] 未知特效类型:${type}`); diff --git a/public/js/effects/effect-sounds.js b/resources/js/effects/effect-sounds.js similarity index 99% rename from public/js/effects/effect-sounds.js rename to resources/js/effects/effect-sounds.js index 8f9571c..09e5651 100644 --- a/public/js/effects/effect-sounds.js +++ b/resources/js/effects/effect-sounds.js @@ -925,5 +925,6 @@ const EffectSounds = (() => { return { play, stop, ding }; })(); +window.EffectSounds = EffectSounds; // 将叮咚通知音暴露为独立全局变量,供 toast/banner 等组件直接调用 window.chatSound = { ding: () => EffectSounds.ding() }; diff --git a/public/js/effects/fireflies.js b/resources/js/effects/fireflies.js similarity index 99% rename from public/js/effects/fireflies.js rename to resources/js/effects/fireflies.js index f5ead53..d2e5937 100644 --- a/public/js/effects/fireflies.js +++ b/resources/js/effects/fireflies.js @@ -173,3 +173,5 @@ const FirefliesEffect = (() => { return { start }; })(); + +window.FirefliesEffect = FirefliesEffect; diff --git a/public/js/effects/fireworks.js b/resources/js/effects/fireworks.js similarity index 99% rename from public/js/effects/fireworks.js rename to resources/js/effects/fireworks.js index 9914716..e487a33 100644 --- a/public/js/effects/fireworks.js +++ b/resources/js/effects/fireworks.js @@ -672,3 +672,5 @@ const FireworksEffect = (() => { return { start, startDouble }; })(); + +window.FireworksEffect = FireworksEffect; diff --git a/public/js/effects/gold-rain.js b/resources/js/effects/gold-rain.js similarity index 99% rename from public/js/effects/gold-rain.js rename to resources/js/effects/gold-rain.js index d3ff3bd..32ef249 100644 --- a/public/js/effects/gold-rain.js +++ b/resources/js/effects/gold-rain.js @@ -153,3 +153,5 @@ const GoldRainEffect = (() => { return { start }; })(); + +window.GoldRainEffect = GoldRainEffect; diff --git a/public/js/effects/hearts.js b/resources/js/effects/hearts.js similarity index 99% rename from public/js/effects/hearts.js rename to resources/js/effects/hearts.js index 622e108..b097d0a 100644 --- a/public/js/effects/hearts.js +++ b/resources/js/effects/hearts.js @@ -135,3 +135,5 @@ const HeartsEffect = (() => { return { start }; })(); + +window.HeartsEffect = HeartsEffect; diff --git a/public/js/effects/lightning.js b/resources/js/effects/lightning.js similarity index 99% rename from public/js/effects/lightning.js rename to resources/js/effects/lightning.js index 91de213..f37341e 100644 --- a/public/js/effects/lightning.js +++ b/resources/js/effects/lightning.js @@ -204,3 +204,5 @@ const LightningEffect = (() => { return { start }; })(); + +window.LightningEffect = LightningEffect; diff --git a/public/js/effects/meteors.js b/resources/js/effects/meteors.js similarity index 99% rename from public/js/effects/meteors.js rename to resources/js/effects/meteors.js index 4d8bb77..8435e4b 100644 --- a/public/js/effects/meteors.js +++ b/resources/js/effects/meteors.js @@ -198,3 +198,5 @@ const MeteorsEffect = (() => { return { start }; })(); + +window.MeteorsEffect = MeteorsEffect; diff --git a/public/js/effects/rain.js b/resources/js/effects/rain.js similarity index 99% rename from public/js/effects/rain.js rename to resources/js/effects/rain.js index 49e9455..4bb742b 100644 --- a/public/js/effects/rain.js +++ b/resources/js/effects/rain.js @@ -124,3 +124,5 @@ const RainEffect = (() => { return { start }; })(); + +window.RainEffect = RainEffect; diff --git a/public/js/effects/sakura.js b/resources/js/effects/sakura.js similarity index 99% rename from public/js/effects/sakura.js rename to resources/js/effects/sakura.js index d8f4052..8b51d03 100644 --- a/public/js/effects/sakura.js +++ b/resources/js/effects/sakura.js @@ -140,3 +140,5 @@ const SakuraEffect = (() => { return { start }; })(); + +window.SakuraEffect = SakuraEffect; diff --git a/public/js/effects/snow.js b/resources/js/effects/snow.js similarity index 99% rename from public/js/effects/snow.js rename to resources/js/effects/snow.js index 2aee95d..208d5cd 100644 --- a/public/js/effects/snow.js +++ b/resources/js/effects/snow.js @@ -260,3 +260,5 @@ const SnowEffect = (() => { return { start }; })(); + +window.SnowEffect = SnowEffect; diff --git a/resources/views/chat/frame.blade.php b/resources/views/chat/frame.blade.php index 3049ff5..e0fb7d7 100644 --- a/resources/views/chat/frame.blade.php +++ b/resources/views/chat/frame.blade.php @@ -227,19 +227,8 @@ @include('chat.partials.games.gomoku-panel') @include('chat.partials.games.earn-panel') - {{-- 全屏特效系统:管理员和会员入场可触发的全屏动效 --}} - - - - - - - - - - - - + {{-- 全屏特效系统:管理员和会员入场可触发的全屏动效,生产环境由 Vite 压缩与版本化 --}} + @vite('resources/js/effects.js') @include('chat.partials.scripts') diff --git a/vite.config.js b/vite.config.js index aed47b5..95b2926 100644 --- a/vite.config.js +++ b/vite.config.js @@ -9,6 +9,7 @@ export default defineConfig({ "resources/css/app.css", "resources/js/app.js", "resources/js/chat.js", + "resources/js/effects.js", ], refresh: true, }),