Skip to content

Dropdown (下拉菜单)

概述

Dropdown 组件是一个灵活的弹出式菜单,广泛应用于各种界面中用于显示和选择操作项。它支持自定义触发方式(如点击或鼠标悬停),以及自定义菜单的位置、禁用状态等功能。通过 Dropdown,开发者可以方便地在应用中集成动态菜单,提升用户交互体验。

预览

基本使用
展示如何使用 Dropdown 组件的基本功能
<template>
  <div class="app">
    <seDropdown
      :trigger="'click'"
      :type="'default'"
      :placement="'bottomLeft'"
      :disabled="false"
      :menuItems="menuItems"
      @onSelect="handleSelect"
  >
    <template #trigger>
      <span>click触发下拉</span>
    </template>
  </seDropdown>
    <seDropdown
        style="margin-left: 40px"
        :trigger="'hover'"
        :type="'default'"
        :placement="'bottomLeft'"
        :disabled="false"
        :menuItems="menuItems"
        @onSelect="handleSelect"
    >
      <template #trigger>
        <span><se-icon icon="mingcute:down-fill" color="#666"/> hover触发下拉</span>
      </template>
    </seDropdown>
  </div>
</template>

<script lang="ts">
import { defineComponent, ref } from "vue";

export default defineComponent({
  name: "App",

  setup() {
    const menuItems = ref([
      { label: '选项1', icon: 'mdi:home' },
      { label: '选项2', icon: 'mdi:account' },
      { label: '选项3', icon: 'mdi:settings' }
    ])

    const handleSelect = (selectedItem: string) => {
      console.log('选中了:', selectedItem); // 输出选中的菜单项内容
    };

    return {
      menuItems,
      handleSelect,
    };
  },
});
</script>

基础使用

使用 Dropdown 组件时,只需在组件内传入菜单项和触发方式,即可快速实现下拉菜单的功能。你可以通过配置不同的参数,控制下拉菜单的外观和行为。

vue
<template>
  <se-dropdown :menuItems="menuItems" @onSelect="handleSelect">
    <template #trigger>
      <button>点击触发下拉</button>
    </template>
  </se-dropdown>
</template>

<script setup>
import { ref } from "vue";
import SeDropdown from "@/components/SeDropdown";

const menuItems = ref(["选项1", "选项2", "选项3"]);

const handleSelect = (selectedItem) => {
  console.log("选中了: ", selectedItem);
};
</script>
参数名类型默认值描述
typeString"default"控制下拉菜单的类型,支持 default 和其他类型的自定义样式。
triggerString"click"控制触发方式,支持 click(点击触发)或 hover(鼠标悬停触发)。
placementString"bottomLeft"控制下拉菜单的位置,支持 bottomLeft, bottomRight, topLeft, topRight
disabledBooleanfalse是否禁用下拉菜单,禁用状态下无法触发下拉操作。
menuItemsArray<string>[]下拉菜单显示的菜单项数组,支持动态数据传入。
事件名参数描述
onSelectselectedItem当用户选择一个菜单项时触发,selectedItem 为选中的菜单项内容。

示例

1. 基本点击触发的下拉菜单

vue
<template>
  <se-dropdown :menuItems="['选项1', '选项2', '选项3']" @onSelect="handleSelect" trigger="click">
    <template #trigger>
      <button>点击显示下拉菜单</button>
    </template>
  </se-dropdown>
</template>

<script setup>
import { ref } from 'vue';

const handleSelect = (selectedItem) => {
  console.log('你选择了: ', selectedItem);
};
</script>

2. 悬停触发的下拉菜单

vue
<template>
  <se-dropdown :menuItems="['选项1', '选项2', '选项3']" @onSelect="handleSelect" trigger="hover">
    <template #trigger>
      <button>鼠标悬停显示下拉菜单</button>
    </template>
  </se-dropdown>
</template>

<script setup>
import { ref } from 'vue';

const handleSelect = (selectedItem) => {
  console.log('你选择了: ', selectedItem);
};
</script>

3. 动态加载菜单项

vue
<template>
  <se-dropdown :menuItems="menuItems" @onSelect="handleSelect">
    <template #trigger>
      <button>点击触发动态加载菜单</button>
    </template>
  </se-dropdown>
</template>

<script setup>
import { ref, onMounted } from 'vue';

const menuItems = ref([]);

const handleSelect = (selectedItem) => {
  console.log('你选择了: ', selectedItem);
};

// 模拟动态加载菜单项
onMounted(() => {
  setTimeout(() => {
    menuItems.value = ['选项A', '选项B', '选项C'];
  }, 1000);
});
</script>

样式说明

Dropdown 组件有多个内置样式类来帮助开发者定制样式:

  • .se-dropdown: 用于整个下拉菜单容器。
  • .se-dropdown--visible: 当菜单可见时,应用的类。
  • .se-dropdown--disabled: 当下拉菜单禁用时,应用的类。
  • .se-dropdown-item: 用于菜单项的类。
  • .se-dropdown-item--selected: 用于选中状态的菜单项类。

你可以根据需要进一步自定义这些样式,或者通过传入不同的 typeplacement 属性来快速改变下拉菜单的外观。

其他说明

  • 动态数据:你可以将一个 menuItems 数组传入 Dropdown 组件,支持动态生成菜单项。也可以通过其他方式(如 API 请求、异步加载等)更新菜单项。
  • 菜单位置placement 参数允许你控制下拉菜单显示的位置。根据需求,你可以将菜单定位在触发器的顶部或底部,以及左对齐或右对齐。

常见问题

1. 下拉菜单为什么会自动消失?

确保你的触发器没有被点击或悬停之外的其他操作影响。我们可以通过监听点击外部区域的事件来手动控制菜单的关闭。

2. 如何处理多级菜单?

如果需要多级菜单,你可以将菜单项嵌套到子组件中,或者手动构建多级结构。

Released under the MIT License.