iter(g28): 浮层 Esc 逐层关闭,阻止冒泡连带关外层
This commit is contained in:
+3
-1
@@ -132,6 +132,7 @@ setInterval(() => percent((percent() + 5) % 105), 400); // 自动推进演示进
|
||||
// —— 标签页 / 弹窗状态 ——
|
||||
const activeTab = signal('a');
|
||||
const modalOpen = signal(false);
|
||||
const modalPick = signal('a'); // 弹窗内下拉的取值,用于演示 Esc 逐层关闭
|
||||
|
||||
// —— 表单校验状态集中声明 ——
|
||||
const username = signal('');
|
||||
@@ -384,7 +385,7 @@ const content = h(
|
||||
section(
|
||||
'sec-tabs-modal',
|
||||
'标签页与弹窗',
|
||||
'tabs 滑动指示条 + 方向键切换(←→),禁用页签置灰;modal 支持 Esc / 遮罩 / × 关闭。',
|
||||
'tabs 滑动指示条 + 方向键切换(←→),禁用页签置灰;modal 支持 Esc / 遮罩 / × 关闭,弹窗内的下拉展开时 Esc 先收下拉、再按才关弹窗(逐层关闭)。',
|
||||
tabs({ tabs: [{ value: 'a', label: '概览' }, { value: 'b', label: '明细' }, { value: 'c', label: '设置' }, { value: 'd', label: '已停用', disabled: true }], active: activeTab }),
|
||||
h('span', { class: 'out' }, () => `当前页签:${activeTab()}`),
|
||||
button({ label: '打开弹窗', onClick: () => modalOpen(true) }),
|
||||
@@ -403,6 +404,7 @@ const content = h(
|
||||
},
|
||||
h('p', null, '这是一个由信号驱动的弹窗组件(size: lg + footer 操作区)。'),
|
||||
h('div', { class: 'row' }, badge({ label: 'modal', variant: 'success' }), badge({ label: 'footer', variant: 'default' })),
|
||||
select({ options: [{ value: 'a', label: '优先处理' }, { value: 'b', label: '排队等待' }, { value: 'c', label: '转交他人' }], value: modalPick }),
|
||||
),
|
||||
),
|
||||
section(
|
||||
|
||||
Reference in New Issue
Block a user