在昨天的文章中,我們成功為 GASO 添加了搜尋功能,現在頁面上的功能愈來愈多了。
今天我們就來解決一個重要的介面設計問題:隨著功能越來越多,原本分散在頁面頂部的控制項變得雜亂,影響了整體的使用體驗。
因此,我們決定打造一個專業級的側邊控制面板,將所有使用者可調整的參數都整合到一個可收合的面板中,大幅提升介面的整潔度和專業感。
首先,我們分析了當前頁面上的所有控制項:
原有控制項:
問題分析:
我們決定採用側邊面板的設計方案:
<!-- 側邊面板切換按鈕 -->
<button class="sidebar-toggle" id="sidebarToggle">⚙️</button>
<!-- 側邊控制面板 -->
<div class="sidebar" id="sidebar">
<div class="sidebar-header">
<h3 class="sidebar-title">控制面板</h3>
<button class="sidebar-close" id="sidebarClose">×</button>
</div>
<!-- 分組的控制項 -->
<div class="control-group">
<!-- 控制項內容 -->
</div>
</div>
設計考量:
為了提供專業的視覺效果,我們設計了完整的 CSS 樣式:
/* 側邊面板樣式 */
.sidebar {
position: fixed;
top: 0;
right: -350px;
width: 350px;
height: 100vh;
background: #f8f9fa;
border-left: 1px solid #dee2e6;
box-shadow: -2px 0 10px rgba(0, 0, 0, 0.1);
transition: right 0.3s ease;
z-index: 1000;
overflow-y: auto;
padding: 20px;
box-sizing: border-box;
}
.sidebar.open {
right: 0;
}
.sidebar-toggle {
position: fixed;
top: 20px;
right: 20px;
background: #007bff;
color: white;
border: none;
border-radius: 50%;
width: 50px;
height: 50px;
font-size: 20px;
cursor: pointer;
box-shadow: 0 2px 10px rgba(0, 123, 255, 0.3);
transition: all 0.3s ease;
z-index: 1001;
}
樣式特色:
我們將所有控制項按功能分為 4 個群組:
<div class="control-group">
<div class="control-group-title">縮放控制</div>
<div class="control-item">
<label>縮放比例</label>
<input id="zoomRange" type="range" min="25" max="400" step="5" value="100" />
<span id="zoomLabel" class="value-display">100%</span>
</div>
<div class="control-item">
<button id="zoomOut">縮小 (−)</button>
</div>
<div class="control-item">
<button id="zoomIn">放大 (+)</button>
</div>
<div class="control-item">
<button id="fitWidth">適應螢幕寬度</button>
</div>
<div class="control-item">
<button id="resetZoom">重設縮放</button>
</div>
</div>
<div class="control-group">
<div class="control-group-title">版面配置</div>
<div class="control-item">
<label>Layout 引擎</label>
<select id="layoutSelect">
<option value="dot">dot(階層式)</option>
<option value="neato">neato(力導向)</option>
<!-- 其他選項... -->
</select>
</div>
<!-- 其他版面配置選項... -->
</div>
<div class="control-group">
<div class="control-group-title">字體設定</div>
<div class="control-item">
<label>字體大小</label>
<input id="fontRange" type="range" min="8" max="40" step="1" value="14" />
<span id="fontLabel" class="value-display">14px</span>
</div>
<!-- 其他字體控制項... -->
</div>
<div class="control-group">
<div class="control-group-title">路徑控制</div>
<div class="control-item">
<button id="clearPathHighlight" class="danger">清除路徑高亮</button>
</div>
</div>
接下來實現面板的 JavaScript 控制邏輯:
// --- 側邊面板控制 ---
function toggleSidebar() {
sidebar.classList.toggle('open');
sidebarToggle.classList.toggle('open');
adjustGraphMargin();
}
function closeSidebar() {
sidebar.classList.remove('open');
sidebarToggle.classList.remove('open');
adjustGraphMargin();
}
function adjustGraphMargin() {
const graph = $("graph");
if (sidebar.classList.contains('open')) {
// 在桌面版時調整邊距
if (window.innerWidth > 768) {
graph.style.marginRight = '350px';
}
} else {
graph.style.marginRight = '0';
}
}
// 側邊面板事件監聽
if (sidebarToggle) {
sidebarToggle.addEventListener('click', toggleSidebar);
}
if (sidebarClose) {
sidebarClose.addEventListener('click', closeSidebar);
}
// 點擊外部關閉側邊面板
document.addEventListener('click', function(e) {
if (sidebar.classList.contains('open') &&
!sidebar.contains(e.target) &&
!sidebarToggle.contains(e.target)) {
closeSidebar();
}
});
// ESC 鍵關閉側邊面板
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape' && sidebar.classList.contains('open')) {
closeSidebar();
}
});
功能特色:
為了提供更好的視覺體驗,我們添加了詳細的樣式設計:
.control-group {
margin-bottom: 25px;
padding: 15px;
background: white;
border-radius: 8px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.control-group-title {
font-size: 14px;
font-weight: bold;
color: #495057;
margin-bottom: 12px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.control-item {
margin-bottom: 15px;
}
.control-item label {
display: block;
margin-bottom: 5px;
font-size: 13px;
color: #666;
font-weight: 500;
}
.control-item button {
width: 100%;
padding: 8px 12px;
border: 1px solid #ced4da;
border-radius: 4px;
background: white;
cursor: pointer;
font-size: 14px;
transition: all 0.2s ease;
}
.control-item button:hover {
background: #f8f9fa;
border-color: #007bff;
}
.control-item button.danger {
background: #dc3545;
color: white;
border-color: #dc3545;
}
設計亮點:
最後,我們添加了完整的響應式設計支援:
/* 響應式設計優化 */
@media (max-width: 768px) {
.sidebar {
width: 100%;
right: -100%;
}
.sidebar.open {
right: 0;
}
.sidebar-toggle.open {
right: 20px;
}
}
響應式特色:
經過今天的開發,GASO 現在具備了:
操作流程:
功能分組:
明天我們將繼續優化 GASO 的功能,可能的方向包括:
今天的開發重點在於解決介面設計和使用者體驗的問題。通過實現專業級的側邊控制面板,我們大幅提升了 GASO 的介面整潔度和專業感。
這個功能看似簡單,但實際上涉及了:
這些技術要點都是前端開發中重要的技能,對於創建專業級的 Web 應用程式至關重要。側邊面板的設計不僅解決了當前的問題,也為未來的功能擴展奠定了良好的基礎。
如果想要看一些我的鐵人賽花邊心得,
也歡迎追蹤我的 Threads 和 Facebook