463 lines
10 KiB
Markdown
463 lines
10 KiB
Markdown
|
|
# 📋 VPS Price - 滑动模式对比功能
|
|||
|
|
|
|||
|
|
## ✨ v3.4 Slide Comparison
|
|||
|
|
|
|||
|
|
### 实现时间
|
|||
|
|
**2026-02-09**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 设计理念
|
|||
|
|
|
|||
|
|
### 用户需求
|
|||
|
|
> "优化价格比对界面,价格对比界面是向右收起,然后只有一个图标,不需要在那里占位,然后星标和访问按钮错位了"
|
|||
|
|
|
|||
|
|
### 解决方案
|
|||
|
|
**向右滑出收起的对比面板**:
|
|||
|
|
- ✅ 对比面板向右滑出隐藏
|
|||
|
|
- ✅ 收起后只显示浮动图标按钮
|
|||
|
|
- ✅ 不占用空间,左侧列表自动占满
|
|||
|
|
- ✅ 修复星标和访问按钮错位问题
|
|||
|
|
- ✅ 平滑的滑动动画
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 核心功能
|
|||
|
|
|
|||
|
|
### 1. 向右滑出收起 ➡️
|
|||
|
|
|
|||
|
|
**设计特点**
|
|||
|
|
- 对比面板向右滑出隐藏
|
|||
|
|
- 平滑的滑动动画(300ms)
|
|||
|
|
- 左侧列表自动占满空间
|
|||
|
|
- 不占用任何空间
|
|||
|
|
|
|||
|
|
**视觉示例**
|
|||
|
|
```
|
|||
|
|
展开状态:
|
|||
|
|
┌────────────────────┬─────────────────┐
|
|||
|
|
│ VPS 列表 │ 对比面板 │
|
|||
|
|
│ │ [→] [✕] │
|
|||
|
|
│ 阿里云 2核4G │ ┌─────────────┐ │
|
|||
|
|
│ 腾讯云 2核4G │ │ 表格数据 │ │
|
|||
|
|
│ Vultr 2核4G │ └─────────────┘ │
|
|||
|
|
└────────────────────┴─────────────────┘
|
|||
|
|
|
|||
|
|
收起状态:
|
|||
|
|
┌────────────────────────────────────┐ 🔘
|
|||
|
|
│ VPS 列表(占满全屏) │ 2
|
|||
|
|
│ │
|
|||
|
|
│ 阿里云 2核4G │
|
|||
|
|
│ 腾讯云 2核4G │
|
|||
|
|
│ Vultr 2核4G │
|
|||
|
|
└────────────────────────────────────┘
|
|||
|
|
↑ 浮动按钮(右侧中间)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2. 浮动切换按钮 🔘
|
|||
|
|
|
|||
|
|
**显示内容**
|
|||
|
|
- **图标**:对比面板图标
|
|||
|
|
- **徽章**:显示对比方案数量
|
|||
|
|
- **位置**:固定在右侧中间
|
|||
|
|
|
|||
|
|
**交互方式**
|
|||
|
|
- 点击浮动按钮展开面板
|
|||
|
|
- 悬停时放大效果
|
|||
|
|
- 阴影增强提示
|
|||
|
|
|
|||
|
|
**优势**
|
|||
|
|
- 不占用空间
|
|||
|
|
- 始终可见
|
|||
|
|
- 一键展开
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3. 表格列表样式 📊
|
|||
|
|
|
|||
|
|
**显示内容**
|
|||
|
|
- **厂商**:阿里云、腾讯云等(加粗蓝色)
|
|||
|
|
- **配置**:2核4G香港
|
|||
|
|
- **vCPU**:2 核
|
|||
|
|
- **内存**:4 GB
|
|||
|
|
- **存储**:40 GB
|
|||
|
|
- **带宽**:5 Mbps
|
|||
|
|
- **流量**:不限
|
|||
|
|
- **区域**:中国香港
|
|||
|
|
- **价格**:¥88(绿色高亮)
|
|||
|
|
- **操作**:访问、移除
|
|||
|
|
|
|||
|
|
**优势**
|
|||
|
|
- 像左侧 VPS 列表一样的布局
|
|||
|
|
- 清晰的表头和数据行
|
|||
|
|
- 行悬停高亮效果
|
|||
|
|
- 紧凑高效的数据展示
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 4. 修复按钮错位 ✅
|
|||
|
|
|
|||
|
|
**问题修复**
|
|||
|
|
- ✅ 星标按钮正确对齐
|
|||
|
|
- ✅ 访问按钮正确对齐
|
|||
|
|
- ✅ 统一的按钮尺寸(32px × 32px)
|
|||
|
|
- ✅ 垂直居中对齐
|
|||
|
|
- ✅ 合理的间距(0.5rem)
|
|||
|
|
|
|||
|
|
**按钮样式**
|
|||
|
|
```css
|
|||
|
|
/* 星标按钮 */
|
|||
|
|
.btn-star {
|
|||
|
|
width: 32px;
|
|||
|
|
height: 32px;
|
|||
|
|
display: inline-flex;
|
|||
|
|
align-items: center;
|
|||
|
|
justify-content: center;
|
|||
|
|
vertical-align: middle;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 访问按钮 */
|
|||
|
|
.btn-link {
|
|||
|
|
display: inline-flex;
|
|||
|
|
align-items: center;
|
|||
|
|
padding: 0.375rem 0.75rem;
|
|||
|
|
vertical-align: middle;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5. 响应式设计 📱
|
|||
|
|
|
|||
|
|
**桌面端(> 768px)**
|
|||
|
|
- 侧边滑出效果
|
|||
|
|
- 固定宽度 400px
|
|||
|
|
- 浮动按钮在右侧中间
|
|||
|
|
|
|||
|
|
**移动端(< 768px)**
|
|||
|
|
- 全屏抽屉效果
|
|||
|
|
- 从右侧滑入
|
|||
|
|
- 覆盖整个屏幕
|
|||
|
|
|
|||
|
|
**小屏幕(< 640px)**
|
|||
|
|
- 100% 宽度
|
|||
|
|
- 按钮纵向排列
|
|||
|
|
- 优化的间距
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📖 使用指南
|
|||
|
|
|
|||
|
|
### 基础操作
|
|||
|
|
|
|||
|
|
#### 1. 添加对比方案
|
|||
|
|
```
|
|||
|
|
1. 在左侧表格点击星标 ☆
|
|||
|
|
2. 右侧对比面板显示表格
|
|||
|
|
3. 默认状态:展开
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2. 收起对比面板
|
|||
|
|
```
|
|||
|
|
1. 点击标题栏右侧的 → 按钮
|
|||
|
|
2. 对比面板向右滑出隐藏
|
|||
|
|
3. 左侧列表自动占满空间
|
|||
|
|
4. 右侧显示浮动按钮
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 3. 展开对比面板
|
|||
|
|
```
|
|||
|
|
1. 点击右侧浮动按钮
|
|||
|
|
2. 对比面板从右侧滑入
|
|||
|
|
3. 显示完整表格
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 4. 查看详情
|
|||
|
|
```
|
|||
|
|
1. 鼠标悬停在表格行上
|
|||
|
|
2. 整行高亮显示
|
|||
|
|
3. 查看完整信息
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 5. 访问官网
|
|||
|
|
```
|
|||
|
|
1. 点击行右侧的"访问"按钮
|
|||
|
|
2. 新标签页打开官网
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 6. 移除方案
|
|||
|
|
```
|
|||
|
|
方法 1:点击行右侧的 ✕ 按钮
|
|||
|
|
方法 2:点击左侧表格的星标 ★
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 7. 清空所有
|
|||
|
|
```
|
|||
|
|
点击标题栏右侧的 ✕ 按钮
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎨 视觉设计
|
|||
|
|
|
|||
|
|
### 布局结构
|
|||
|
|
```
|
|||
|
|
展开状态:
|
|||
|
|
┌─────────────────────────────────────────┐
|
|||
|
|
│ VPS 列表 (1fr) │ 对比面板 (400px) │
|
|||
|
|
│ │ [→] [✕] │
|
|||
|
|
│ │ ┌───────────────────┐ │
|
|||
|
|
│ │ │ 表格数据 │ │
|
|||
|
|
│ │ └───────────────────┘ │
|
|||
|
|
└─────────────────────────────────────────┘
|
|||
|
|
|
|||
|
|
收起状态:
|
|||
|
|
┌─────────────────────────────────────────┐ 🔘
|
|||
|
|
│ VPS 列表 (100%) │ 2
|
|||
|
|
│ │
|
|||
|
|
└─────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 颜色方案
|
|||
|
|
```css
|
|||
|
|
/* 浮动按钮 */
|
|||
|
|
--accent: #0369A1
|
|||
|
|
--accent-dark: #075985
|
|||
|
|
|
|||
|
|
/* 徽章 */
|
|||
|
|
background: white
|
|||
|
|
color: var(--accent)
|
|||
|
|
|
|||
|
|
/* 表头背景 */
|
|||
|
|
--bg-elevated: #F1F5F9
|
|||
|
|
|
|||
|
|
/* 行悬停 */
|
|||
|
|
--bg-elevated: #F1F5F9
|
|||
|
|
|
|||
|
|
/* 厂商名称 */
|
|||
|
|
--accent: #0369A1
|
|||
|
|
|
|||
|
|
/* 价格 */
|
|||
|
|
--green: #059669
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 动画效果
|
|||
|
|
```css
|
|||
|
|
/* 滑动动画 */
|
|||
|
|
transform: translateX(100%);
|
|||
|
|
transition: transform 0.3s ease, opacity 0.3s ease;
|
|||
|
|
|
|||
|
|
/* 布局过渡 */
|
|||
|
|
grid-template-columns: 1fr 400px;
|
|||
|
|
transition: grid-template-columns 0.3s ease;
|
|||
|
|
|
|||
|
|
/* 浮动按钮悬停 */
|
|||
|
|
transform: translateY(-50%) scale(1.05);
|
|||
|
|
transition: all 0.2s;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 💻 技术实现
|
|||
|
|
|
|||
|
|
### 核心数据结构
|
|||
|
|
```javascript
|
|||
|
|
var isComparisonVisible = true; // 对比面板显示状态
|
|||
|
|
|
|||
|
|
// 切换显示状态
|
|||
|
|
function toggleComparisonPanel() {
|
|||
|
|
isComparisonVisible = !isComparisonVisible;
|
|||
|
|
updateComparison();
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 面板显示控制
|
|||
|
|
```javascript
|
|||
|
|
function updateComparison() {
|
|||
|
|
var panel = document.getElementById('comparison-panel');
|
|||
|
|
var floatingBtn = document.getElementById('floating-toggle-btn');
|
|||
|
|
|
|||
|
|
if (isComparisonVisible) {
|
|||
|
|
panel.classList.add('visible');
|
|||
|
|
panel.classList.remove('hidden');
|
|||
|
|
floatingBtn.style.display = 'none';
|
|||
|
|
} else {
|
|||
|
|
panel.classList.remove('visible');
|
|||
|
|
panel.classList.add('hidden');
|
|||
|
|
floatingBtn.style.display = 'flex';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### CSS 滑动实现
|
|||
|
|
```css
|
|||
|
|
/* 默认展开 */
|
|||
|
|
.comparison-panel {
|
|||
|
|
transform: translateX(0);
|
|||
|
|
opacity: 1;
|
|||
|
|
transition: transform 0.3s ease, opacity 0.3s ease;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 收起状态 */
|
|||
|
|
.comparison-panel.hidden {
|
|||
|
|
transform: translateX(100%);
|
|||
|
|
opacity: 0;
|
|||
|
|
pointer-events: none;
|
|||
|
|
width: 0;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 布局自适应
|
|||
|
|
```css
|
|||
|
|
/* 默认布局 */
|
|||
|
|
.split-layout {
|
|||
|
|
grid-template-columns: 1fr 400px;
|
|||
|
|
transition: grid-template-columns 0.3s ease;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 面板隐藏时 */
|
|||
|
|
.split-layout:has(.comparison-panel.hidden) {
|
|||
|
|
grid-template-columns: 1fr 0px;
|
|||
|
|
gap: 0;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 性能优化
|
|||
|
|
|
|||
|
|
### 已实施
|
|||
|
|
- ✅ CSS transform 硬件加速
|
|||
|
|
- ✅ 使用 :has() 伪类自动调整布局
|
|||
|
|
- ✅ 事件委托减少监听器
|
|||
|
|
- ✅ 按需渲染表格内容
|
|||
|
|
|
|||
|
|
### 性能指标
|
|||
|
|
- 滑动动画:300ms
|
|||
|
|
- 布局过渡:300ms
|
|||
|
|
- 按钮响应:< 20ms
|
|||
|
|
- 表格渲染:< 50ms
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 使用场景
|
|||
|
|
|
|||
|
|
### 场景 1:专注浏览列表
|
|||
|
|
```
|
|||
|
|
1. 收起对比面板
|
|||
|
|
2. 左侧列表占满全屏
|
|||
|
|
3. 专注浏览更多方案
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 场景 2:快速对比价格
|
|||
|
|
```
|
|||
|
|
1. 收藏 2-3 个方案
|
|||
|
|
2. 查看表格对比价格
|
|||
|
|
3. 选择最优方案
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 场景 3:灵活切换
|
|||
|
|
```
|
|||
|
|
1. 需要时展开对比面板
|
|||
|
|
2. 不需要时收起节省空间
|
|||
|
|
3. 一键切换,操作便捷
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📱 响应式设计
|
|||
|
|
|
|||
|
|
### 桌面端(> 768px)
|
|||
|
|
- 侧边滑出效果
|
|||
|
|
- 固定宽度 400px
|
|||
|
|
- 浮动按钮在右侧中间
|
|||
|
|
|
|||
|
|
### 移动端(< 768px)
|
|||
|
|
- 全屏抽屉效果
|
|||
|
|
- 从右侧滑入
|
|||
|
|
- 覆盖整个屏幕
|
|||
|
|
- 浮动按钮在右下角
|
|||
|
|
|
|||
|
|
### 小屏幕(< 640px)
|
|||
|
|
- 100% 宽度
|
|||
|
|
- 按钮纵向排列
|
|||
|
|
- 最小化间距
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📁 文件变更
|
|||
|
|
|
|||
|
|
### 新增文件
|
|||
|
|
```
|
|||
|
|
static/js/main-comparison-slide.js (18 KB, 508 行)
|
|||
|
|
SLIDE_COMPARISON.md (本文件)
|
|||
|
|
test_slide_comparison.sh (测试脚本)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 修改文件
|
|||
|
|
```
|
|||
|
|
static/css/style.css (新增 250+ 行样式)
|
|||
|
|
templates/index.html (添加浮动按钮,更新 JS 引用)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 备份文件
|
|||
|
|
```
|
|||
|
|
static/js/main-comparison-list.js (v3.3 列表版)
|
|||
|
|
static/js/main-comparison-table.js (v3.2 表格版)
|
|||
|
|
static/js/main-comparison-enhanced.js (v3.1 增强版)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎉 功能对比
|
|||
|
|
|
|||
|
|
### v3.3 → v3.4
|
|||
|
|
|
|||
|
|
| 功能 | v3.3 列表版 | v3.4 滑动版 |
|
|||
|
|
|------|------------|------------|
|
|||
|
|
| 分屏布局 | ✅ | ✅ |
|
|||
|
|
| 实时对比 | ✅ | ✅ |
|
|||
|
|
| 表格样式 | ✅ | ✅ |
|
|||
|
|
| 行悬停高亮 | ✅ | ✅ |
|
|||
|
|
| 可折叠 | ✅ 整体面板 | ✅ **向右滑出** |
|
|||
|
|
| 浮动按钮 | ❌ | ✅ **右侧浮动** |
|
|||
|
|
| 自动布局 | ❌ | ✅ **占满空间** |
|
|||
|
|
| 按钮对齐 | ❌ 有错位 | ✅ **已修复** |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 立即体验
|
|||
|
|
|
|||
|
|
### 访问地址
|
|||
|
|
```
|
|||
|
|
http://127.0.0.1:5001
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 强制刷新
|
|||
|
|
```
|
|||
|
|
Mac: Cmd + Shift + R
|
|||
|
|
Windows: Ctrl + Shift + R
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 测试步骤
|
|||
|
|
1. ⭐ 点击 2-3 个方案的星标
|
|||
|
|
2. 👀 查看右侧对比面板(表格模式)
|
|||
|
|
3. ➡️ 点击标题栏右侧的 → 按钮收起面板
|
|||
|
|
4. 🔘 查看右侧浮动按钮(显示数量徽章)
|
|||
|
|
5. ⬅️ 点击浮动按钮展开面板
|
|||
|
|
6. 🖱️ 鼠标悬停在表格行上查看高亮
|
|||
|
|
7. 🔗 点击"访问"按钮测试跳转
|
|||
|
|
8. ❌ 点击"✕"按钮移除单个方案
|
|||
|
|
9. 🗑️ 点击右上角"✕"清空所有对比
|
|||
|
|
10. 📱 调整窗口测试响应式
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**开发者**:Claude Sonnet 4.5
|
|||
|
|
**版本**:v3.4 Slide Comparison
|
|||
|
|
**实现日期**:2026-02-09
|
|||
|
|
|
|||
|
|
🎊 **向右滑出,节省空间!**
|