Files
KatelyaTV/EPISODE_SELECTOR_FIX.md
T

82 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 选集点击偏移 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
- 兼容性:保持所有现有功能不变
- 性能:无性能影响,反而可能更好
这个修复确保了点击精确性,解决了用户体验问题。