DropdownMenu 下拉菜单

介绍

向下弹出的菜单列表。

代码演示

基础用法

<z-dropdown-menu>
  <z-dropdown-item v-model="value1" :options="option1" />
  <z-dropdown-item v-model="value2" :options="option2" />
</z-dropdown-menu>
import { ref } from 'vue'
const value1 = ref(0)
const value2 = ref('a')
const option1 = [
  { text: '全部商品', value: 0 },
  { text: '新款商品', value: 1 },
  { text: '活动商品', value: 2 }
]
const option2 = [
  { text: '默认排序', value: 'a' },
  { text: '好评排序', value: 'b' },
  { text: '销量排序', value: 'c' }
]

自定义菜单内容

通过插槽可以自定义 DropdownItem 的内容,此时需要使用 DropdownMenu 实例上的 close 或指定 DropdownItemtoggle 方法手动控制菜单的显示。

<z-dropdown-menu>
  <z-dropdown-item v-model="value1" :options="option1" />
  <z-dropdown-item title="筛选" ref="item">
    <z-cell center title="选项一">
      <template #right-icon>
        <z-switch v-model="switch1" />
      </template>
    </z-cell>
    <z-cell center title="选项二">
      <template #right-icon>
        <z-switch v-model="switch2" />
      </template>
    </z-cell>
    <view style="padding: 10rpx 32rpx">
      <z-button
        type="primary"
        block
        round
        style="height: 80rpx"
        @click="onConfirm"
      >
        确认
      </z-button>
    </view>
  </z-dropdown-item>
</z-dropdown-menu>
import { ref } from 'vue';
const value1 = ref(0)
const option1 = [
  { text: '全部商品', value: 0 },
  { text: '新款商品', value: 1 },
  { text: '活动商品', value: 2 }
]
const item = ref()
const switch1 = ref(true)
const switch2 = ref(false)
const onConfirm = () => {
  item.value?.toggle()
}

自定义选中态颜色

通过 active-color 属性可以自定义菜单标题和选项的选中态颜色。

<z-dropdown-menu active-color="#ee0a24">
  <z-dropdown-item v-model="value1" :options="option1" />
  <z-dropdown-item v-model="value2" :options="option2" />
</z-dropdown-menu>

横向滚动

通过 swipe-threshold 属性可以自定义滚动阈值。

<z-dropdown-menu swipe-threshold="4">
  <z-dropdown-item v-model="value1" :options="option1" />
  <z-dropdown-item v-model="value2" :options="option2" />
  <z-dropdown-item v-model="value2" :options="option2" />
  <z-dropdown-item v-model="value2" :options="option2" />
  <z-dropdown-item v-model="value2" :options="option2" />
</z-dropdown-menu>

向上展开

direction 属性值设置为 up,菜单即可向上展开。

<z-dropdown-menu direction="up">
  <z-dropdown-item v-model="value1" :options="option1" />
  <z-dropdown-item v-model="value2" :options="option2" />
</z-dropdown-menu>

禁用菜单

<z-dropdown-menu>
  <z-dropdown-item v-model="value1" disabled :options="option1" />
  <z-dropdown-item v-model="value2" disabled :options="option2" />
</z-dropdown-menu>

API

参数说明类型默认值
active-color菜单标题和选项的选中态颜色string#1989fa
direction菜单展开方向,可选值为upstringdown
z-index菜单栏 z-index 层级number | string10
duration动画时长,单位毫秒,设置为 0 可以禁用动画number | string200
overlay是否显示遮罩层booleantrue
close-on-click-overlay是否在点击遮罩层后关闭菜单booleantrue
close-on-click-outside是否在点击外部元素后关闭菜单booleantrue
swipe-threshold滚动阈值,选项数量超过阈值且总宽度超过菜单栏宽度时,可以横向滚动number | string-
参数说明类型默认值
v-model当前选中项对应的 valuenumber | string-
title菜单项标题string当前选中项文字
options选项数组Option[]
disabled是否禁用菜单booleanfalse
title-class标题额外类名string | Array | object-
事件名说明回调参数
change点击选项导致 value 变化时触发value
open打开菜单栏时触发-
close关闭菜单栏时触发-
opened打开菜单栏且动画结束后触发-
closed关闭菜单栏且动画结束后触发-
名称说明
default菜单内容
title自定义菜单项标题

通过 ref 可以获取到 DropdownMenu 实例并调用实例方法。

方法名说明参数返回值
close关闭所有菜单的展示状态--

通过 ref 可以获取到 DropdownItem 实例并调用实例方法。

方法名说明参数返回值
toggle切换菜单展示状态,传 true 为显示,false 为隐藏,不传参为取反show?: boolean-

Option 数据结构

键名说明类型
text文字string
value标识符number | string | boolean
icon左侧图标名称或图片链接,等同于 Icon 组件的 name 属性string

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件

名称默认值描述
--z-dropdown-menu-height96rpx-
--z-dropdown-menu-backgroundvar(--z-background-2)-
--z-dropdown-menu-shadow0 4rpx 24rpx fade(var(--z-gray-7), 12)-
--z-dropdown-menu-title-font-size30rpx-
--z-dropdown-menu-title-text-colorvar(--z-text-color)-
--z-dropdown-menu-title-active-text-colorvar(--z-primary-color)-
--z-dropdown-menu-title-disabled-text-colorvar(--z-text-color-2)-
--z-dropdown-menu-title-padding0 var(--z-padding-xs)-
--z-dropdown-menu-title-line-heightvar(--z-line-height-lg)-
--z-dropdown-menu-option-active-colorvar(--z-primary-color)-
--z-dropdown-menu-content-max-height80%-
--z-dropdown-item-z-index10-