From e9c81caa120297bb35d8c03656ef07b30b483d88 Mon Sep 17 00:00:00 2001 From: 2977094657 <2977094657@qq.com> Date: Sat, 7 Feb 2026 20:59:03 +0800 Subject: [PATCH] =?UTF-8?q?improvement(wrapped-ui):=20=E4=B8=8B=E7=BA=BF?= =?UTF-8?q?=20DOS=20=E4=B8=BB=E9=A2=98=E5=B9=B6=E4=BC=98=E5=8C=96=20Wrappe?= =?UTF-8?q?d=20=E5=A4=9A=E4=B8=BB=E9=A2=98=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 DOS 主题入口、切换器组件与相关样式逻辑,统一主题为 Modern / GameBoy / Win98。 - 新增 WrappedGameboyDither 组件,并在背景与 CRT 叠加层中引入 GameBoy 噪点效果。 - 优化 wrapped 页面视口高度与背景同步逻辑(含 ResizeObserver 与 100dvh 适配),提升桌面容器显示稳定性。 - 调整封面标题与预览位移、回复速度卡片滚动行为等细节,提升主题下视觉与交互一致性。 --- .../wrapped/cards/Card03ReplySpeed.vue | 15 ++- .../wrapped/shared/WrappedCRTOverlay.vue | 33 ++---- .../wrapped/shared/WrappedCardShell.vue | 38 +------ .../wrapped/shared/WrappedControls.vue | 24 ----- .../wrapped/shared/WrappedDeckBackground.vue | 15 ++- .../wrapped/shared/WrappedGameboyDither.vue | 98 +++++++++++++++++ .../components/wrapped/shared/WrappedHero.vue | 8 +- .../wrapped/shared/WrappedThemeSwitcher.vue | 1 - .../shared/WrappedThemeSwitcherDos.vue | 100 ------------------ .../shared/WrappedThemeSwitcherGameboy.vue | 1 - .../shared/WrappedThemeSwitcherModern.vue | 1 - .../shared/WrappedThemeSwitcherWin98.vue | 1 - .../wrapped/shared/WrappedYearSelector.vue | 70 ------------ frontend/composables/useWrappedTheme.js | 34 +++--- frontend/pages/wrapped/index.vue | 49 +++++++-- 15 files changed, 192 insertions(+), 296 deletions(-) create mode 100644 frontend/components/wrapped/shared/WrappedGameboyDither.vue delete mode 100644 frontend/components/wrapped/shared/WrappedThemeSwitcherDos.vue diff --git a/frontend/components/wrapped/cards/Card03ReplySpeed.vue b/frontend/components/wrapped/cards/Card03ReplySpeed.vue index b71252d..66ae36c 100644 --- a/frontend/components/wrapped/cards/Card03ReplySpeed.vue +++ b/frontend/components/wrapped/cards/Card03ReplySpeed.vue @@ -186,7 +186,7 @@ 暂无可展示的排行榜数据。 -
+
theme.value === 'gameboy') -const isDos = computed(() => theme.value === 'dos') -const isRetro = computed(() => isGameboy.value || isDos.value) +const isRetro = computed(() => isGameboy.value) const nfInt = new Intl.NumberFormat('zh-CN', { maximumFractionDigits: 0 }) const formatInt = (n) => nfInt.format(Math.round(Number(n) || 0)) @@ -756,6 +755,16 @@ onBeforeUnmount(() => { transition: transform 500ms cubic-bezier(0.22, 1, 0.36, 1) !important; } +.race-scroll { + scrollbar-width: none; + -ms-overflow-style: none; +} + +.race-scroll::-webkit-scrollbar { + width: 0; + height: 0; +} + .race-move { transition: transform 350ms cubic-bezier(0.22, 1, 0.36, 1) !important; } diff --git a/frontend/components/wrapped/shared/WrappedCRTOverlay.vue b/frontend/components/wrapped/shared/WrappedCRTOverlay.vue index 40af685..b376187 100644 --- a/frontend/components/wrapped/shared/WrappedCRTOverlay.vue +++ b/frontend/components/wrapped/shared/WrappedCRTOverlay.vue @@ -1,6 +1,17 @@ - - diff --git a/frontend/components/wrapped/shared/WrappedCardShell.vue b/frontend/components/wrapped/shared/WrappedCardShell.vue index f209387..862b045 100644 --- a/frontend/components/wrapped/shared/WrappedCardShell.vue +++ b/frontend/components/wrapped/shared/WrappedCardShell.vue @@ -87,8 +87,7 @@ defineProps({ const { theme } = useWrappedTheme() const isWin98 = computed(() => theme.value === 'win98') const isGameboy = computed(() => theme.value === 'gameboy') -const isDos = computed(() => theme.value === 'dos') -const isCompactSlide = computed(() => isGameboy.value || isDos.value) +const isCompactSlide = computed(() => isGameboy.value) const slideTitleClass = computed(() => ( isCompactSlide.value ? 'text-xl sm:text-2xl' : 'text-2xl sm:text-3xl' @@ -142,39 +141,4 @@ const slideContainerClass = computed(() => ( border-color: #306230 !important; } -/* ========== DOS 主题 ========== */ - -/* 卡片背景 */ -.wrapped-theme-dos .bg-white { - background: #0a0a0a !important; - border-color: #33ff33 !important; - box-shadow: 0 0 10px rgba(51, 255, 51, 0.3); -} - -/* 标题 */ -.wrapped-theme-dos .wrapped-title { - color: #33ff33 !important; - text-shadow: 0 0 5px #33ff33; - font-family: 'Courier New', monospace; -} - -/* 描述文字 */ -.wrapped-theme-dos .wrapped-body { - color: #22aa22 !important; - text-shadow: 0 0 3px #22aa22; - font-family: 'Courier New', monospace; -} - -/* 数字高亮 */ -.wrapped-theme-dos .wrapped-number { - color: #33ff33 !important; - text-shadow: 0 0 8px #33ff33; - font-family: 'Courier New', monospace; -} - -/* 边框 */ -.wrapped-theme-dos .border-\[\#EDEDED\], -.wrapped-theme-dos .border-\[\#F3F3F3\] { - border-color: #33ff33 !important; -} diff --git a/frontend/components/wrapped/shared/WrappedControls.vue b/frontend/components/wrapped/shared/WrappedControls.vue index 4bba0d8..8ab5b8e 100644 --- a/frontend/components/wrapped/shared/WrappedControls.vue +++ b/frontend/components/wrapped/shared/WrappedControls.vue @@ -131,30 +131,6 @@ const yearOptions = computed(() => { filter: brightness(1.1); } -/* DOS 特殊样式 */ -.wrapped-theme-dos .controls-panel { - border-radius: 0; - border: 2px solid #33ff33; - box-shadow: 0 0 10px rgba(51, 255, 51, 0.3); -} - -.wrapped-theme-dos .controls-select { - border-radius: 0; - border: 1px solid #33ff33; - text-shadow: 0 0 5px #33ff33; -} - -.wrapped-theme-dos .controls-btn { - border-radius: 0; - background-color: #33ff33; - color: #000000; - text-shadow: none; -} - -.wrapped-theme-dos .controls-btn:hover:not(:disabled) { - background-color: #44ff44; -} - /* Win98 特殊样式 */ .wrapped-theme-win98 .controls-panel { border-radius: 0; diff --git a/frontend/components/wrapped/shared/WrappedDeckBackground.vue b/frontend/components/wrapped/shared/WrappedDeckBackground.vue index 81bc08d..e8b8024 100644 --- a/frontend/components/wrapped/shared/WrappedDeckBackground.vue +++ b/frontend/components/wrapped/shared/WrappedDeckBackground.vue @@ -1,5 +1,5 @@