feat: 修复选集点击偏移问题,优化布局和事件处理

This commit is contained in:
katelya
2025-09-03 21:42:00 +08:00
parent d6e14b2d00
commit 9aeef4bc63
4 changed files with 97 additions and 4 deletions
+81
View File
@@ -0,0 +1,81 @@
# 选集点击偏移 Bug 修复
## 问题描述
用户报告在选集界面中,点击第 6 集(紫色框框选中的区域)时,系统错误地选择了第 7 集(绿色填充的区域)。这是一个经典的点击目标偏移问题。
## 根因分析
1. **CSS 网格布局问题**:原来使用 `grid-cols-[repeat(auto-fill,minmax(40px,1fr))]`
- `1fr` 使每个按钮占据相同的可用空间
- 这导致视觉按钮大小和实际点击区域不匹配
- auto-fill 在某些屏幕尺寸下可能导致不可预测的布局
2. **点击事件处理**:原有的点击处理没有足够的事件控制
## 修复方案
### 1. 布局修复
将 CSS 网格布局改为 Flexbox 布局:
```css
/* 原来的布局 */
grid grid-cols-[repeat(auto-fill,minmax(40px,1fr))] auto-rows-[40px] gap-x-3 gap-y-3
/* 修复后的布局 */
flex flex-wrap justify-start gap-3
```
### 2. 按钮尺寸固定
- 设置固定的按钮尺寸:`w-12 h-10`48px × 40px
- 添加 `flex-shrink-0` 确保按钮不会收缩
- 使用明确的尺寸避免布局计算错误
### 3. 点击事件优化
```javascript
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
handleEpisodeClick(episodeNumber);
}}
```
- 添加 `preventDefault()``stopPropagation()` 防止事件冒泡
- 设置 `type="button"` 明确按钮类型
- 添加聚焦样式 `focus:ring-2 focus:ring-green-400`
### 4. 样式改进
- 添加 `border-0 outline-none` 移除默认边框
- 保持悬停和选中状态的视觉反馈
- 确保按钮在所有主题下都有清晰的视觉边界
## 预期效果
修复后,用户点击哪个集数按钮就会选择对应的集数,不再出现点击偏移的问题。每个按钮都有:
- 精确的 48px 宽度和 40px 高度
- 清晰的点击边界
- 正确的事件处理
- 良好的视觉反馈
## 测试方法
1. 打开任意多集剧集的播放页面
2. 在选集面板中点击不同的集数按钮
3. 验证点击的集数和实际选中的集数是否一致
4. 测试不同屏幕尺寸下的表现
5. 验证键盘导航和聚焦状态
## 技术细节
- 文件位置:`src/components/EpisodeSelector.tsx`
- 主要修改:布局从 CSS Grid 改为 Flexbox
- 兼容性:保持所有现有功能不变
- 性能:无性能影响,反而可能更好
这个修复确保了点击精确性,解决了用户体验问题。