Dropdown 下拉菜单
向下弹出的列表。
何时使用
当页面上的操作命令过多时,用此组件可以收纳操作元素。点击或移入触点,会出现一个下拉菜单。可在列表中进行选择,并执行相应的命令。
- 用于收罗一组命令操作。
- Select 用于选择,而 Dropdown 是命令集合。
代码演示
基本
文字下拉菜单
<template>
<div class="down-demos">
<div class="down-demo">
<f-dropdown>
<span class="down-demo-action">
下拉菜单
<DownOutlined />
</span>
<template #overlay>
<f-menu>
<f-menu-item key="1-1">操作一</f-menu-item>
<f-menu-item key="1-2">操作二</f-menu-item>
<f-menu-item key="1-3">操作三</f-menu-item>
</f-menu>
</template>
</f-dropdown>
</div>
<div class="down-demo">
<f-dropdown>
<span class="down-demo-action">
带图标下拉菜单
<DownOutlined />
</span>
<template #overlay>
<f-menu>
<f-menu-item key="2-1">
<template #icon>
<MailOutlined />
</template>
操作一
</f-menu-item>
<f-menu-item key="2-2">
<template #icon>
<MailOutlined />
</template>
操作二
</f-menu-item>
<f-menu-item key="2-3">
<template #icon>
<MailOutlined />
</template>
操作三
</f-menu-item>
</f-menu>
</template>
</f-dropdown>
</div>
<div class="down-demo">
<f-dropdown>
<span class="down-demo-action">
多级下拉菜单
<DownOutlined />
</span>
<template #overlay>
<f-menu>
<f-menu-item key="3-1">操作三</f-menu-item>
<f-menu-item key="3-2">操作四</f-menu-item>
<f-sub-menu title="操作四">
<f-menu-item key="3-3-1">操作四-1</f-menu-item>
<f-menu-item key="3-3-2">操作四-2</f-menu-item>
<f-sub-menu title="操作四-3">
<f-menu-item key="3-3-2-1">操作四-3-1</f-menu-item>
<f-menu-item key="3-3-2-2">操作四-3-2</f-menu-item>
<f-menu-item key="3-3-2-3">操作四-3-3</f-menu-item>
</f-sub-menu>
<f-menu-item key="3-3-3">操作四-4</f-menu-item>
</f-sub-menu>
<f-menu-item key="3-4">操作五</f-menu-item>
</f-menu>
</template>
</f-dropdown>
</div>
</div>
</template>
<script lang="ts" setup>
import { DownOutlined, MailOutlined } from '@ant-design/icons-vue'
</script>
<style lang="scss" scoped>
.down-demos {
position: relative;
display: flex;
justify-content: space-around;
}
.down-demo {
flex: 1;
}
.down-demo-action {
color: #378eef;
cursor: pointer;
> .anticon {
margin-left: 4px;
}
}
</style>
图标下拉菜单
<template>
<div class="down-demos">
<div class="down-demo">
<f-dropdown>
<a href="javascript:;" class="down-handle">
<WindowsOutlined />
</a>
<template #overlay>
<f-menu>
<f-menu-item key="1-1">操作一</f-menu-item>
<f-menu-item key="1-2">操作二</f-menu-item>
<f-menu-item key="1-3">操作三</f-menu-item>
</f-menu>
</template>
</f-dropdown>
</div>
<div class="down-demo">
<f-dropdown>
<a href="javascript:;" class="down-handle">
<AndroidOutlined />
</a>
<template #overlay>
<f-menu>
<f-menu-item key="2-1">
<template #icon>
<MailOutlined />
</template>
操作一
</f-menu-item>
<f-menu-item key="2-2">
<template #icon>
<MailOutlined />
</template>
操作二
</f-menu-item>
<f-menu-item key="2-3">
<template #icon>
<MailOutlined />
</template>
操作三
</f-menu-item>
</f-menu>
</template>
</f-dropdown>
</div>
<div class="down-demo">
<f-dropdown>
<a href="javascript:;" class="down-handle">
<AppleOutlined />
</a>
<template #overlay>
<f-menu>
<f-menu-item key="3-1">操作三</f-menu-item>
<f-menu-item key="3-2">操作四</f-menu-item>
<f-sub-menu title="操作四">
<f-menu-item key="3-3-1">操作四-1</f-menu-item>
<f-menu-item key="3-3-2">操作四-2</f-menu-item>
<f-sub-menu title="操作四-3">
<f-menu-item key="3-3-2-1">操作四-3-1</f-menu-item>
<f-menu-item key="3-3-2-2">操作四-3-2</f-menu-item>
<f-menu-item key="3-3-2-3">操作四-3-3</f-menu-item>
</f-sub-menu>
<f-menu-item key="3-3-3">操作四-4</f-menu-item>
</f-sub-menu>
<f-menu-item key="3-4">操作五</f-menu-item>
</f-menu>
</template>
</f-dropdown>
</div>
</div>
</template>
<script lang="ts" setup>
import { WindowsOutlined, AndroidOutlined, AppleOutlined, MailOutlined } from '@ant-design/icons-vue'
</script>
<style lang="scss" scoped>
.down-demos {
position: relative;
display: flex;
justify-content: space-around;
}
.down-demo {
flex: 1;
}
.down-handle {
display: block;
width: 20px;
height: 20px;
display: flex;
align-items: center;
justify-content: center;
text-decoration: none;
border-radius: 2px;
color: #333;
&:hover {
background: #f1f4f8;
}
}
</style>
按钮下拉菜单
<template>
<div class="down-demos">
<div class="down-demo">
<f-dropdown-button type="primary">
<PlusOutlined />
按钮
<template #overlay>
<f-menu>
<f-menu-item key="1-1">操作一</f-menu-item>
<f-menu-item key="1-2">操作二</f-menu-item>
<f-menu-item key="1-3">操作三</f-menu-item>
</f-menu>
</template>
<template #icon>
<DownOutlined />
</template>
</f-dropdown-button>
</div>
<div class="down-demo">
<f-dropdown-button>
<QuestionOutlined />
按钮
<template #overlay>
<f-menu>
<f-menu-item key="2-1">
<template #icon>
<MailOutlined />
</template>
操作一
</f-menu-item>
<f-menu-item key="2-2">
<template #icon>
<MailOutlined />
</template>
操作二
</f-menu-item>
<f-menu-item key="2-3">
<template #icon>
<MailOutlined />
</template>
操作三
</f-menu-item>
</f-menu>
</template>
<template #icon>
<DownOutlined />
</template>
</f-dropdown-button>
</div>
<div class="down-demo">
<f-dropdown-button>
<PlusOutlined />
按钮
<template #overlay>
<f-menu>
<f-menu-item key="3-1">操作三</f-menu-item>
<f-menu-item key="3-2">操作四</f-menu-item>
<f-sub-menu title="操作四">
<f-menu-item key="3-3-1">操作四-1</f-menu-item>
<f-menu-item key="3-3-2">操作四-2</f-menu-item>
<f-sub-menu title="操作四-3">
<f-menu-item key="3-3-2-1">操作四-3-1</f-menu-item>
<f-menu-item key="3-3-2-2">操作四-3-2</f-menu-item>
<f-menu-item key="3-3-2-3">操作四-3-3</f-menu-item>
</f-sub-menu>
<f-menu-item key="3-3-3">操作四-4</f-menu-item>
</f-sub-menu>
<f-menu-item key="3-4">操作五</f-menu-item>
</f-menu>
</template>
<template #icon>
<DownOutlined />
</template>
</f-dropdown-button>
</div>
</div>
</template>
<script lang="ts" setup>
import { PlusOutlined, QuestionOutlined, DownOutlined, MailOutlined } from '@ant-design/icons-vue'
</script>
<style lang="scss" scoped>
.down-demos {
position: relative;
display: flex;
justify-content: space-around;
}
.down-demo {
flex: 1;
}
</style>
API
属性如下
参数 | 说明 | 类型 | 默认值 | |
---|
destroyPopupOnHide | 关闭后是否销毁 Dropdown | boolean | false | 3.0 |
disabled | 菜单是否禁用 | boolean | - | |
getPopupContainer | 菜单渲染父节点。默认渲染到 body 上,如果你遇到菜单滚动定位问题,试试修改为滚动的区域,并相对其定位。 | Function(triggerNode) | () => document.body | |
overlay(v-slot) | 菜单 | Menu | - | |
overlayClassName | 下拉根元素的类名称 | string | - | |
overlayStyle | 下拉根元素的样式 | object | - | |
placement | 菜单弹出位置 | bottomLeft | bottom | bottomRight | topLeft | top | topRight | bottomLeft | |
trigger | 触发下拉的行为, 移动端不支持 hover | Array<click |hover |contextmenu > | ['hover'] | |
visible(v-model) | 菜单是否显示 | boolean | - | |
overlay
菜单使用 Menu,还包括菜单项 Menu.Item
,分割线 Menu.Divider
。
注意: Menu.Item 必须设置唯一的 key 属性。
Dropdown 下的 Menu 默认不可选中。如果需要菜单可选中,可以指定 <Menu selectable>
.
事件
事件名称 | 说明 | 回调参数 |
---|
visibleChange | 菜单显示状态改变时调用,参数为 visible。点击菜单按钮导致的消失不会触发 | function(visible) |
参数 | 说明 | 类型 | 默认值 | 版本 |
---|
disabled | 菜单是否禁用 | boolean | - | |
icon | 右侧的 icon | VNode | slot | - | 1.5.0 |
loading | 设置按钮载入状态 | boolean | | false | 3.0 |
overlay(v-slot) | 菜单 | Menu | - | |
placement | 菜单弹出位置 | bottomLeft | bottom | bottomRight | topLeft | top | topRight | bottomLeft | |
size | 按钮大小,和 Button 一致 | string | 'default' | |
trigger | 触发下拉的行为 | Array<click |hover |contextmenu > | ['hover'] | |
type | 按钮类型,和 Button 一致 | string | 'default' | |
visible(v-model) | 菜单是否显示 | boolean | - | |
事件名称 | 说明 | 回调参数 |
---|
click | 点击左侧按钮的回调,和 Button 一致 | Function |
visibleChange | 菜单显示状态改变时调用,参数为 visible。点击菜单按钮导致的消失不会触发 | function(visible) |