2.6 KiB
2.6 KiB
Swipe 切换功能优化
问题描述
之前的实现中,swipe 切换按钮只在最新消息上显示,这导致用户无法查看和切换历史消息的不同版本。
SillyTavern 的设计
在 SillyTavern 中,所有包含多个版本的 AI 消息都会显示 swipe 切换按钮,用户可以随时查看和切换任何消息的不同版本。
修复内容
1. 移除 isLatestMessage 限制
修改前:
{hasSwipes && !isUser && isLatestMessage && (
<div className="swipe-controls">
...
</div>
)}
修改后:
{/* ✅ Swipe 控制按钮 - 所有有 swipe 的 AI 消息都显示 */}
{hasSwipes && !isUser && (
<div className="swipe-controls">
...
</div>
)}
2. 添加悬停提示
为按钮添加了 title 属性,提供更好的用户体验:
- ◀ 按钮:
title="上一个版本" - ▶ 按钮:
title="下一个版本" - 计数器:
title={共 ${message.swipes.length} 个版本}
3. 优化样式设计
参考 SillyTavern 的风格,重新设计了 swipe 控制按钮:
容器样式
- 居中对齐
- 轻微背景色区分
- 圆角边框
- 自适应宽度
按钮样式
- 清晰的边框和背景
- 悬停时高亮显示(蓝色主题)
- 悬停时有轻微的向上动画
- 禁用状态降低透明度
- 最小宽度确保视觉一致性
计数器样式
- 加粗字体突出显示
- 独立的背景色块
- 居中对齐的数字
- 最小宽度保持视觉稳定
视觉效果
正常状态
┌─────────────────────┐
│ [◀] 2/5 [▶] │
└─────────────────────┘
悬停状态
- 按钮变为蓝色高亮
- 轻微向上移动
- 显示阴影效果
禁用状态
- 第一个消息:◀ 按钮禁用
- 最后一个消息:▶ 按钮禁用
- 禁用的按钮透明度降低
用户体验提升
- 完整性:可以查看和切换任何消息的版本,不仅限于最新消息
- 一致性:与 SillyTavern 的行为保持一致
- 易用性:添加了悬停提示,用户清楚每个按钮的功能
- 美观性:优化的样式更符合整体设计风格
技术细节
文件修改
ChatBox.jsx:移除isLatestMessage条件判断,添加 title 属性ChatBox.css:完全重写 swipe 控件样式
兼容性
- 不影响现有功能
- 向后兼容
- 性能无影响
未来改进
- 可以添加键盘快捷键支持(如 Alt+←/→ 切换版本)
- 可以添加 swipe 版本的预览功能
- 可以添加批量管理 swipe 版本的功能