凌云UI 使用手册
接入
组件
图表
页面
  • 总览
  • 组件 1.0.42
  • 图表 1.0.27
  • 页面包 1.0.3
GitHub
接入
组件
图表
页面
  • 总览
  • 组件 1.0.42
  • 图表 1.0.27
  • 页面包 1.0.3
GitHub
  • 组件

    • 目录
  • 页面与导航

    • 页面壳
    • 窄屏
    • 平板与电脑
    • 宽屏目录
    • 顶栏
    • 主题切换
    • 底栏
    • 搜索栏
    • 侧栏浮层
  • 基础控件

    • 布局
    • 按钮
    • 图标
    • 角标
    • 分段控件
    • 标签
    • 筛选胶囊
    • 文本
    • 图片
    • 头像
    • 分页点
  • 表单

    • 输入框
    • 表单
    • 表单分组
    • 表单行
    • 开关
    • 步进器
    • 日期切换器
    • 复选框
    • 单选
    • 单选组
    • 多选列表
    • 单选列表
    • 滑条
    • 选择器
    • 日期选择器
    • 级联选择
  • 列表与内容

    • 列表
    • 列表行
    • 分组卡片
    • 表格
    • 滑动容器
    • 滑动行
    • 空状态
    • 骨架屏
    • 下拉刷新
    • 宫格
    • 索引列表
  • 反馈

    • 加载转圈
    • 进度
    • 轻提示
    • 加载遮罩
    • 反馈宿主
  • 浮层

    • 弹窗
    • 底部面板
    • 操作列表
    • 分享面板
    • 气泡
    • 菜单
    • 上下文菜单
    • 悬浮按钮
    • 商品导航

lingyun-menu

下拉菜单。actions 描述每一行。

示例

<lingyun-menu
  v-model:show="open"
  :actions="[
    { text: '编辑', icon: 'compose' },
    { text: '删除', role: 'destructive' },
  ]"
  @select="onSelect"
/>

<!-- 全宽:手机铺满可用宽度,PC / PAD 上限 400,定位仍贴触发按钮 -->
<lingyun-menu v-model:show="fullOpen" full-width :actions="actions" @select="onSelect">
  <template #trigger>
    <lingyun-button text="全宽菜单" @click="fullOpen = !fullOpen" />
  </template>
</lingyun-menu>

顶部 toolbar 筛选按钮

不要自己往工具栏 #trailing 塞按钮。用 lingyun-app-page 的 trailing-buttons(支持二维分组),监听 trailing-action,拿事件里的 anchor 打开全宽菜单即可,按钮尺寸与小程序胶囊避让由 app-page 统一处理。完整示例见 demo pages/demo/filter-menu。

<lingyun-app-page
  title="订单"
  :trailing-buttons="[[{ key: 'filter', icon: 'tune', label: '筛选' }]]"
  :trailing-buttons-hidden="filterMenuOpen"
  @trailing-action="onToolbarAction"
>
  <lingyun-menu
    v-model:show="filterOpen"
    full-width
    :anchor="menuAnchor"
    @closed="filterMenuOpen = false"
  >
    <template #default="{ close }">
      <view class="filter-form">
        <!-- 自定义筛选表单 -->
        <lingyun-button text="应用" block @click="apply(close)" />
      </view>
    </template>
  </lingyun-menu>
</lingyun-app-page>
function onToolbarAction(payload: { key?: string; anchor?: object | null }): void {
  if (payload.key !== 'filter') return
  filterMenuOpen.value = true
  menuAnchor.value = payload.anchor || null
  filterOpen.value = true
}

菜单打开期间 trailing-buttons-hidden 会让右上角按钮组淡出,closed 动画结束后再恢复,避免按钮从浮层边缘露出。

属性

属性说明默认值
show / modelValue是否打开—
actions行:{ text, icon, role, disabled }[]
placement弹出方向—
maskClosable点外面关闭true
fullWidth全宽面板:手机铺满可用宽度,PC / PAD 上限 400;定位仍跟随触发器false
anchor视口坐标 { top, left, width, height };传了就用它定位,不再依赖 trigger 插槽null

事件

事件说明
select选中一行

自定义内容

不传 actions(或传空数组)时,默认插槽接管菜单面板,菜单只负责弹出、定位、遮罩和动效,里面的表单完全由页面自定义。插槽作用域提供 { close, show },调用 close() 收起菜单。actions 非空时优先渲染内置菜单行,默认插槽不生效。

<lingyun-menu v-model:show="filterOpen" full-width>
  <template #trigger="{ toggle }">
    <view class="filter-slot" @click="toggle">
      <lingyun-icon type="tune" :size="22" />
    </view>
  </template>
  <template #default="{ close }">
    <view class="filter-form">
      <lingyun-segmented-control v-model="status" :items="statusItems" size="small" />
      <lingyun-button text="应用" block @click="apply(close)" />
    </view>
  </template>
</lingyun-menu>

完整示例见 demo pages/demo/filter-menu:顶部筛选按钮打开全宽菜单,内部是状态 / 时间范围 / 排序 / 只看我的 / 重置与应用的自定义表单。

动效

打开时从触发按钮中心、原位置长出一颗 48–72px 的玻璃水滴,再拉伸成面板;点击后按钮立即隐藏,面板最终覆盖按钮原来的位置。按钮偏左时菜单左上角对齐按钮,按钮偏右时菜单右上角对齐按钮,面板向空间大的一侧展开,不会水平居中在按钮下面;圆角落定 32 并轻微回弹,约 0.46s。面板内容晚约 0.1s 淡入,H5 同时从模糊清晰化。关闭时内容先淡出,面板反向收缩并淡出;菜单几乎完全消失后按钮再淡入,不做下挂小水滴(异形融合需要画布,Web / 小程序暂不实现)。对齐 iOS 27 菜单,规范见 design/MENUS.md §3.1。

Edit this page
最近更新: 2026/11/6 18:36
Contributors: qiu, Claude Fable 5
Prev
气泡
Next
上下文菜单