Files
SillyTavern_replica/SWIPE_BUTTON_FIX.md
2026-05-05 21:51:34 +08:00

2.6 KiB
Raw Blame History

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  [▶]     │
└─────────────────────┘

悬停状态

  • 按钮变为蓝色高亮
  • 轻微向上移动
  • 显示阴影效果

禁用状态

  • 第一个消息:◀ 按钮禁用
  • 最后一个消息:▶ 按钮禁用
  • 禁用的按钮透明度降低

用户体验提升

  1. 完整性:可以查看和切换任何消息的版本,不仅限于最新消息
  2. 一致性:与 SillyTavern 的行为保持一致
  3. 易用性:添加了悬停提示,用户清楚每个按钮的功能
  4. 美观性:优化的样式更符合整体设计风格

技术细节

文件修改

  • ChatBox.jsx:移除 isLatestMessage 条件判断,添加 title 属性
  • ChatBox.css:完全重写 swipe 控件样式

兼容性

  • 不影响现有功能
  • 向后兼容
  • 性能无影响

未来改进

  1. 可以添加键盘快捷键支持(如 Alt+←/→ 切换版本)
  2. 可以添加 swipe 版本的预览功能
  3. 可以添加批量管理 swipe 版本的功能