将聊天室特效脚本纳入 Vite 打包

This commit is contained in:
2026-04-25 03:02:56 +08:00
parent 855d031b04
commit c410897231
15 changed files with 57 additions and 28 deletions
+18
View File
@@ -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";
@@ -150,3 +150,5 @@ const ConfettiEffect = (() => {
return { start };
})();
window.ConfettiEffect = ConfettiEffect;
@@ -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}`);
@@ -925,5 +925,6 @@ const EffectSounds = (() => {
return { play, stop, ding };
})();
window.EffectSounds = EffectSounds;
// 将叮咚通知音暴露为独立全局变量,供 toast/banner 等组件直接调用
window.chatSound = { ding: () => EffectSounds.ding() };
@@ -173,3 +173,5 @@ const FirefliesEffect = (() => {
return { start };
})();
window.FirefliesEffect = FirefliesEffect;
@@ -672,3 +672,5 @@ const FireworksEffect = (() => {
return { start, startDouble };
})();
window.FireworksEffect = FireworksEffect;
@@ -153,3 +153,5 @@ const GoldRainEffect = (() => {
return { start };
})();
window.GoldRainEffect = GoldRainEffect;
@@ -135,3 +135,5 @@ const HeartsEffect = (() => {
return { start };
})();
window.HeartsEffect = HeartsEffect;
@@ -204,3 +204,5 @@ const LightningEffect = (() => {
return { start };
})();
window.LightningEffect = LightningEffect;
@@ -198,3 +198,5 @@ const MeteorsEffect = (() => {
return { start };
})();
window.MeteorsEffect = MeteorsEffect;
@@ -124,3 +124,5 @@ const RainEffect = (() => {
return { start };
})();
window.RainEffect = RainEffect;
@@ -140,3 +140,5 @@ const SakuraEffect = (() => {
return { start };
})();
window.SakuraEffect = SakuraEffect;
@@ -260,3 +260,5 @@ const SnowEffect = (() => {
return { start };
})();
window.SnowEffect = SnowEffect;
+2 -13
View File
@@ -227,19 +227,8 @@
@include('chat.partials.games.gomoku-panel')
@include('chat.partials.games.earn-panel')
{{-- 全屏特效系统:管理员和会员入场可触发的全屏动效 --}}
<script src="/js/effects/effect-sounds.js"></script>
<script src="/js/effects/effect-manager.js"></script>
<script src="/js/effects/fireworks.js"></script>
<script src="/js/effects/rain.js"></script>
<script src="/js/effects/lightning.js"></script>
<script src="/js/effects/snow.js"></script>
<script src="/js/effects/sakura.js"></script>
<script src="/js/effects/meteors.js"></script>
<script src="/js/effects/gold-rain.js"></script>
<script src="/js/effects/hearts.js"></script>
<script src="/js/effects/confetti.js"></script>
<script src="/js/effects/fireflies.js"></script>
{{-- 全屏特效系统:管理员和会员入场可触发的全屏动效,生产环境由 Vite 压缩与版本化 --}}
@vite('resources/js/effects.js')
@include('chat.partials.scripts')
+1
View File
@@ -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,
}),