Modal window 最佳實踐
x
Vue 3 useModal hook
Hunter Liu
簡介 Modal
其實你不需要 Modal
決策樹
模態視窗 - 創建一個禁用主視窗的模式,並使主視窗和子視窗可見。用戶必須先與模態視窗進行交互後才能對主視窗進行操作 。
標題
遮罩
內容
按鈕
關閉
立刻吸引使用者注意力
限制操作流程
警告、提示、通知使用者
請求使用者輸入必要資訊
重複確認不可逆的重要操作
Dialog
Fullscreen Modal
Overlay
Lightbox
Modal
Non-modal
Popups
Confirm
Toast
Spinner
Notification
Mode
Alert
Window
Panel
Drawer
Lightbox 存在遮罩 |
Non-lightbox 不存在遮罩 |
|
Modal 不能對背景操作 |
Dialog Confirm Spinner |
Fullscreen Modal Panel Drawer |
Non-modal 能對背景操作 |
X | Toast Notification Alert |
一言不合就 Modal
變成了 RD 的夢魘
關閉彈窗已成為使用者的本能
是時候重新審視這個 UI 模式了
但...
Yes
No
Page
Yes
No
Page
Yes
No
Page
Yes
No
Page
Yes
No
Non-modal
是否為成功或錯誤訊息
Yes
No
Non-modal
Yes
No
Dialog
Bottom Sheet
Nav Drawer
Panel
...
(useModal 的部分)
沒找到足夠彈性的 Modal 元件
只好自己做一個!
Dialog
Fullscreen Modal
Overlay
Lightbox
Modal
Non-modal
Popups
Confirm
Toast
Spinner
Notification
Mode
Alert
Window
Panel
Drawer
LockScroll
BootstrapVue
Stackable
zIndex
zIndexBase
Element UI
Attach
Vuetify
API: this.$modal.show
Dynamic Modal
Transition
FocusTrap
vue-js-modal
Vue 3 有 Teleport
classes
styles
transition
clickToClose
escToClose
focusTrap
content-class
content-style
drag
drag-selector
resize
resize-directions
fit-parant
keep-changed-style
min-width
max-width
min-height
max-height
name
modelValue
displayDirective
lockScoll
nonModal
attach
z-index-auto
z-index-base
z-index
overlay-class
overlay-style
overlay-transition
hide-overlay
@before-open
@opened
@before-close
@closed
@click-outside
@drag:start
@drag:move
@drag:end
@resize:start
@resize:move
@resize:end
$vfm.show(name)
開啟指定 modal
$vfm.hide(name)
關閉指定 modal
$vfm.hideAll()
關閉所有 modal
$vfm.toggle(name, show)
切換指定 modal
$vfm.modals
回傳所有 modal 實例陣列
$vfm.openedModals
回傳所有開啟中的 modal 實例陣列
$vfm.dynamicModals
回傳所有動態 modal 實例陣列
通常放在 App.vue 或 Layout 元件
&
歡迎到 Github 許願