UI组件交互

UI组件是构建用户界面的基础元素,通过丰富的交互行为提供更好的用户体验。

常用交互组件

组件类型 交互行为 使用场景
按钮(Button) 点击、悬停、按下、禁用状态 触发操作、提交表单、页面跳转
下拉菜单(Dropdown) 展开/收起、选项选择、搜索过滤 导航菜单、选项选择、分类筛选
标签页(Tabs) 切换内容、显示/隐藏面板 内容分类、功能分区、多步骤流程
模态框(Modal) 显示/隐藏、背景遮罩、焦点管理 确认操作、详细信息展示、表单填写

组件状态管理

正常状态

组件的默认外观和行为

悬停状态

鼠标悬停时的视觉反馈

激活状态

组件被点击或选中时的状态

禁用状态

不可交互时的视觉表现

UI组件实现方式

原生JavaScript

直接操作DOM元素,手动管理组件状态

// HTML: <div class="tabs-container"> <div class="tab-buttons"> <button class="tab-btn active" data-tab="tab1">标签1</button> <button class="tab-btn" data-tab="tab2">标签2</button> <button class="tab-btn" data-tab="tab3">标签3</button> </div> <div class="tab-content"> <div id="tab1" class="tab-panel active">内容1</div> <div id="tab2" class="tab-panel">内容2</div> <div id="tab3" class="tab-panel">内容3</div> </div> </div> // JavaScript: const tabButtons = document.querySelectorAll('.tab-btn'); const tabPanels = document.querySelectorAll('.tab-panel'); tabButtons.forEach(button => { button.addEventListener('click', handleTabClick); }); function handleTabClick(event) { const clickedTab = event.target; const tabId = clickedTab.dataset.tab; // 移除所有激活状态 tabButtons.forEach(btn => btn.classList.remove('active')); tabPanels.forEach(panel => panel.classList.remove('active')); // 激活当前标签 clickedTab.classList.add('active'); document.getElementById(tabId).classList.add('active'); }

Vue.js实现

使用响应式数据管理组件状态,更简洁

<!-- Vue模板 --> <template> <div class="tabs-container"> <div class="tab-buttons"> <button v-for="tab in tabs" :key="tab.id" @click="activeTab = tab.id" :class="{ 'active': activeTab === tab.id }" class="tab-btn"> {{ tab.title }} </button> </div> <div class="tab-content"> <div v-for="tab in tabs" :key="tab.id" v-show="activeTab === tab.id" class="tab-panel"> {{ tab.content }} </div> </div> </div> </template> <script> export default { data() { return { activeTab: 'tab1', tabs: [ { id: 'tab1', title: '标签1', content: '内容1' }, { id: 'tab2', title: '标签2', content: '内容2' }, { id: 'tab3', title: '标签3', content: '内容3' } ] } } } </script> <style> .tab-panel { /* 样式定义 */ } </style>
← Interaction Forms Interaction Animation →