From 2180751a9b84e700a8d3d0c4f79804e84e58eae3 Mon Sep 17 00:00:00 2001 From: hhs <386998068@qq.com> Date: Mon, 22 Jun 2026 12:05:54 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E4=BE=A7=E8=BE=B9=E6=A0=8F=E5=8F=8C=E9=87=8D=E5=B1=95=E5=BC=80?= =?UTF-8?q?=E5=8A=A8=E7=94=BB=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除条件渲染和 CSS animation 的冲突,改用纯 CSS transition 控制显示/隐藏。 **问题根源:** - 组件使用 `if (!open) return null;` 条件渲染,导致挂载时立即出现 - CSS 同时使用 `animation: slideInLeft`,触发从 -100% 的二次滑入 - 两个独立显示机制叠加,造成双重动画闪烁 **修复方案:** - SessionSidebar: 移除条件渲染,始终保持 DOM 存在,通过动态 className 控制状态 - App.css: 移除 `animation` 和 `@keyframes`,改用 `transition: transform` - 新增 `.sidebar--collapsed` / `.sidebar--open` 类控制 `translateX` - 新增 `.sidebar-backdrop--visible` 类控制背景遮罩淡入淡出 - 添加 `pointer-events: none` 确保隐藏状态不响应交互 影响范围: - frontend/src/components/SessionSidebar/index.tsx - frontend/src/App.css --- frontend/src/App.css | 23 +++++++++++++++---- .../src/components/SessionSidebar/index.tsx | 9 ++++---- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/frontend/src/App.css b/frontend/src/App.css index 9afbf9a..268cc55 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -217,7 +217,15 @@ body { background: rgba(10, 10, 15, 0.45); backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px); - animation: fadeIn 0.2s ease; + cursor: pointer; + opacity: 0; + pointer-events: none; + transition: opacity 0.3s var(--transition-smooth); +} + +.sidebar-backdrop--visible { + opacity: 1; + pointer-events: auto; } .sidebar { @@ -232,13 +240,18 @@ body { background: var(--color-surface); border-right: 1px solid var(--color-border); overflow: hidden; - animation: slideInLeft 0.3s var(--transition-smooth); box-shadow: 8px 0 40px rgba(10, 10, 15, 0.4); + transition: transform 0.3s var(--transition-smooth); } -@keyframes slideInLeft { - from { transform: translateX(-100%); } - to { transform: translateX(0); } +.sidebar--collapsed { + transform: translateX(-100%); + pointer-events: none; +} + +.sidebar--open { + transform: translateX(0); + pointer-events: auto; } .sidebar--collapsed { diff --git a/frontend/src/components/SessionSidebar/index.tsx b/frontend/src/components/SessionSidebar/index.tsx index 7d444d7..043e380 100644 --- a/frontend/src/components/SessionSidebar/index.tsx +++ b/frontend/src/components/SessionSidebar/index.tsx @@ -118,8 +118,6 @@ export function SessionSidebar({ return groups; }, [sessions, searchQuery]); - if (!open) return null; - const groupLabels: Record = { today: t("sidebar.today"), yesterday: t("sidebar.yesterday"), @@ -128,8 +126,11 @@ export function SessionSidebar({ return ( <> -
-
+
+
{/* 头部:新建 + 收起 */}