ActionSheet 動作面板 - Vant 4
ActionSheet 動作面板
📋 介紹
動作面板是一個優雅的交互組件!它從底部彈起,為用戶提供與當前情境相關的多個選項。無論是分享、編輯、刪除,還是其他操作,動作面板都能讓用戶快速做出選擇,提供流暢的操作體驗。
📦 引入
通過以下方式來全局註冊組件,更多註冊方式請參考組件註冊。
js
import { createApp } from'vue';
import { ActionSheet } from'vant';
const app = createApp();
app.use(ActionSheet);🎯 代碼演示
基礎用法
動作面板通過 actions 屬性來定義選項,actions 屬性是一個由對象構成的數組,數組中的每個對象配置一列,對象格式見文檔下方表格。簡單配置,即可擁有功能完整的動作面板!
js
import { ref } from'vue';
import { showToast } from'vant';
export default {
setup() {
const show = ref(false);
const actions = [ { name: '選項一' }, { name: '選項二' }, { name: '選項三' }, ];
const onSelect = (item) => {
// 默認情況下點擊選項時不會自動收起
// 可以通過 close-on-click-action 屬性開啟自動收起
show.value = false;
showToast(item.name);
};
return { show, actions, onSelect, };
},
};展示圖標
使用 actions 的 icon 字段可以為選項設置圖標,讓選項更加直觀易懂!
js
import { ref } from'vue';
import { showToast } from'vant';
export default {
setup() {
const show = ref(false);
const actions = [ { name: '選項一', icon: 'cart-o' }, { name: '選項二', icon: 'shop-o' }, { name: '選項三', icon: 'star-o' }, ]; const onSelect = (item) => {
show.value = false;
showToast(item.name);
};
return { show, actions, onSelect };
};
}展示取消按鈕
設置 cancel-text 屬性後,會在底部展示取消按鈕,點擊後關閉當前面板並觸發 cancel 事件。
js
import { ref } from'vue';
import { showToast } from'vant';
export default {
setup() {
const show = ref(false);
const actions = [ { name: '選項一' }, { name: '選項二' }, { name: '選項三' }, ];
const onCancel = () => showToast('取消');
return { show, actions, onCancel};
}
};展示描述信息
通過 description 可以在菜單頂部顯示描述信息,通過選項的 subname 屬性可以在選項文字的右側展示描述信息。
js
import { ref } from'vue';
export default {
setup() {
const show = ref(false);
const actions = [ { name: '選項一' }, { name: '選項二' }, { name: '選項三', subname: '描述信息' }, ];
const onSelect = (item) => {
show.value = false;
showToast(item.name);
};
return { show, actions, onSelect, };
}
};選項狀態
可以通過 loading 和 disabled 將選項設置為加載狀態或禁用狀態,或者通過color設置選項的顏色
js
import { ref } from'vue';
export default {
setup() {
const show = ref(false);
const actions = [ { name: '著色選項', color: '#ee0a24' }, { name: '禁用選項', disabled: true }, { name: '加載選項', loading: true }, ];
const onSelect = (item) => {
show.value = false;
showToast(item.name);
};
return { show, actions, onSelect, };
}
};自定義面板
通過插槽可以自定義面板的展示內容,同時可以使用title屬性展示標題欄
API
Props
| 參數 | 說明 | 類型 | 默認值 |
|---|---|---|---|
| v-model:show | 是否顯示動作面板 | boolean | false |
| actions | 面板選項列表 | ActionSheetAction[] | [] |
| title | 頂部標題 | string | - |
| cancel-text | 取消按鈕文字 | string | - |
| description | 選項上方的描述信息 | string | - |
| closeable | 是否顯示關閉圖標 | boolean | true |
| close-icon | 關閉圖標名稱或圖片鏈接,等同於 Icon 組件的 name 屬性 | string | cross |
| duration | 動畫時長,單位秒,設置為 0 可以禁用動畫 | *number | string* |
| z-index | 將面板的 z-index 層級設置為一個固定值 | *number | string* |
| round | 是否顯示圓角 | boolean | true |
| overlay | 是否顯示遮罩層 | boolean | true |
| overlay-class | 自定義遮罩層類名 | *string | Array |
| overlay-style | 自定義遮罩層樣式 | object | - |
| lock-scroll | 是否鎖定背景滾動 | boolean | true |
| lazy-render | 是否在顯示彈層時才渲染節點 | boolean | true |
| close-on-popstate | 是否在頁面回退時自動關閉 | boolean | true |
| close-on-click-action | 是否在點擊選項後關閉 | boolean | false |
| close-on-click-overlay | 是否在點擊遮罩層後關閉 | boolean | true |
| safe-area-inset-bottom | 是否開啟底部安全區適配 | boolean | true |
| teleport | 指定掛載的節點,等同於 Teleport 組件的 to 屬性 | *string | Element* |
| before-close | 關閉前的回調函數,返回 false 可阻止關閉,支持返回 Promise | *(action: string) => boolean | Promise<boolean>* |
Action 數據結構
actions 屬性是一個由對象構成的數組,數組中的每個對象配置一列,對象可以包含以下值:
| 鍵名 | 說明 | 類型 |
|---|---|---|
| name | 標題 | string |
| subname | 二級標題 | string |
| color | 選項文字顏色 | string |
icon v4.8.6 | 選項圖標名稱或圖片鏈接 | string |
| className | 為對應列添加額外的 class | *string |
| loading | 是否為加載狀態 | boolean |
| disabled | 是否為禁用狀態 | boolean |
| callback | 點擊時觸發的回調函數 | action: ActionSheetAction |
Events
| 事件名 | 說明 | 回調參數 |
|---|---|---|
| select | 點擊選項時觸發,禁用或加載狀態下不會觸發 | action: ActionSheetAction, index: number |
| cancel | 點擊取消按鈕時觸發 | - |
| open | 打開面板時觸發 | - |
| close | 關閉面板時觸發 | - |
| opened | 打開面板且動畫結束後觸發 | - |
| closed | 關閉面板且動畫結束後觸發 | - |
| click-overlay | 點擊遮罩層時觸發 | event: MouseEvent |
Slots
| 名稱 | 說明 | 參數 |
|---|---|---|
| default | 自定義面板的展示內容 | - |
| description | 自定義描述文案 | - |
| cancel | 自定義取消按鈕內容 | - |
| action | 自定義選項內容 | { action: ActionSheetAction, index: number } |
類型定義
組件導出以下類型定義:
ts
import type { ActionSheetProps, ActionSheetAction } from 'vant';主題定制
樣式變量
組件提供了下列 CSS 變量,可用於自定義樣式,使用方法請參考 ConfigProvider 組件。
| 名稱 | 默認值 | 描述 |
|---|---|---|
| --van-action-sheet-max-height | 80% | - |
| --van-action-sheet-header-height | 48px | - |
| --van-action-sheet-header-font-size | var(--van-font-size-lg) | - |
| --van-action-sheet-description-color | var(--van-text-color-2) | - |
| --van-action-sheet-description-font-size | var(--van-font-size-md) | - |
| --van-action-sheet-description-line-height | var(--van-line-height-md) | - |
| --van-action-sheet-item-background | var(--van-background-2) | - |
| --van-action-sheet-item-font-size | var(--van-font-size-lg) | - |
| --van-action-sheet-item-line-height | var(--van-line-height-lg) | - |
| --van-action-sheet-item-text-color | var(--van-text-color) | - |
| --van-action-sheet-item-disabled-text-color | var(--van-text-color-3) | - |
| --van-action-sheet-item-icon-size | 18px | - |
| --van-action-sheet-item-icon-margin-right | var(--van-padding-xs) | - |
| --van-action-sheet-subname-color | var(--van-text-color-2) | - |
| --van-action-sheet-subname-font-size | var(--van-font-size-sm) | - |
| --van-action-sheet-subname-line-height | var(--van-line-height-sm) | - |
| --van-action-sheet-close-icon-size | 22px | - |
| --van-action-sheet-close-icon-color | var(--van-gray-5) | - |
| --van-action-sheet-close-icon-padding | 0 var(--van-padding-md) | - |
| --van-action-sheet-cancel-text-color | var(--van-gray-7) | - |
| --van-action-sheet-cancel-padding-top | var(--van-padding-xs) | - |
| --van-action-sheet-cancel-padding-color | var(--van-background) | - |
| --van-action-sheet-loading-icon-size | 22px | - |
🎉 總結
ActionSheet 動作面板是移動端交互的明星組件!它優雅地從底部彈起,為用戶提供清晰的選擇界面。無論是簡單的選項列表,還是帶圖標、描述的複雜面板,ActionSheet 都能輕鬆勝任,讓你的應用交互更加流暢自然。
📚 相關內容
想要了解更多?這些內容可能對你有幫助:
- 🚀 快速開始 - 從零開始,快速上手 Vant
- 🎨 主題定制 - 打造專屬於你的視覺風格
- 📱 移動端適配 - 讓你的應用在各種設備上完美呈現
- 🔧 高級用法 - 解鎖更多高級功能和技巧
- 🎯 ActionBar 動作欄 - 了解底部動作欄的使用方法
- 🎪 Icon 圖標 - 探索豐富的圖標庫
- 🎭 Popup 彈出層 - 掌握彈出層組件的使用技巧
- 🎨 Overlay 遮罩層 - 學習遮罩層的應用場景
- 📋 最佳實踐 - 學習開發中的最佳實踐
- 🔍 常見問題 - 快速解決開發中的疑問
- 💬 聯繫我們 - 遇到問題?我們隨時為你提供幫助