更新记录

1.0.2(2025-07-01) 下载此版本

更新文档

1.0.1(2025-04-24) 下载此版本

优化

1.0.0(2025-04-22) 下载此版本

初版

查看更多

平台兼容性

uni-app

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
-

其他

多语言 暗黑模式 宽屏模式
× ×

x-contextual-menu 上下文菜单组件

简介

x-contextual-menu 是一个基于 Vue 的上下文菜单组件,支持长按触发,提供灵活的菜单定位和自定义样式功能。

功能特性

  • 长按触发上下文菜单
  • 智能定位,自动避开屏幕边界
  • 支持自定义菜单内容
  • 平滑的动画效果
  • 响应式设计,适配不同屏幕尺寸

基础用法

默认菜单

<template>
  <x-contextual-menu 
    :menuList="menuItems"
    @menuClick="handleMenuClick"
    @close="handleClose">
    <view class="content">
      长按我显示菜单
    </view>
  </x-contextual-menu>
</template>

<script>
export default {
  data() {
    return {
      menuItems: ['复制', '粘贴', '删除']
    }
  },
  methods: {
    handleMenuClick(e) {
      console.log('点击菜单项:', e.value, '索引:', e.index)
    },
    handleClose() {
      console.log('菜单关闭')
    }
  }
}
</script>

自定义菜单内容

<template>
  <x-contextual-menu @close="handleClose">
    <view class="content">
      长按我显示自定义菜单
    </view>

    <!-- 自定义菜单内容 -->
    <template #menu>
      <view class="custom-menu">
        <view class="menu-item" @click="customAction1">
          <text>📋 复制</text>
        </view>
        <view class="menu-item" @click="customAction2">
          <text>📝 编辑</text>
        </view>
        <view class="menu-item danger" @click="customAction3">
          <text>🗑️ 删除</text>
        </view>
      </view>
    </template>
  </x-contextual-menu>
</template>

<script>
export default {
  methods: {
    customAction1() {
      console.log('执行复制操作')
    },
    customAction2() {
      console.log('执行编辑操作')
    },
    customAction3() {
      console.log('执行删除操作')
    },
    handleClose() {
      console.log('菜单关闭')
    }
  }
}
</script>

<style>
.custom-menu {
  background: #fff;
  border-radius: 8rpx;
  box-shadow: 0 2rpx 20rpx rgba(0,0,0,0.3);
}

.menu-item {
  padding: 24rpx 32rpx;
  border-bottom: 1rpx solid #f0f0f0;
}

.menu-item:last-child {
  border-bottom: none;
}

.menu-item.danger text {
  color: #ff4757;
}

.menu-item:active {
  background-color: rgba(0,0,0,0.1);
}
</style>

API 参考

Props

参数 类型 默认值 说明
menuList Array ['菜单1', '菜单2', '菜单3'] 默认菜单项列表
boundary String/Number '20rpx' 菜单距离屏幕边界的最小距离
customStyle Object {} 长按触发区域自定义样式

Events

事件名 参数 说明
menuClick {value: any, index: number} 点击菜单项时触发,返回菜单项值和索引
close - 菜单关闭时触发

Slots

插槽名 说明
default 触发区域内容,长按此区域显示菜单
menu 自定义菜单内容,会覆盖默认的 menuList 渲染

样式定制

CSS 变量

组件支持通过 CSS 变量进行样式定制:

/* 全局样式定制 */
.x-contextual-menu {
  /* 自定义触发区域样式 */
}

.x-contextual-menu-mask {
  /* 自定义遮罩层样式 */
  background-color: rgba(0, 0, 0, 0.5);
}

.longpress-menu {
  /* 自定义菜单容器样式 */
  background: #f8f9fa;
  border-radius: 12rpx;
}

.menu-item {
  /* 自定义菜单项样式 */
  padding: 30rpx 40rpx;
}

主题定制示例

<template>
  <x-contextual-menu 
    class="dark-theme"
    :menuList="menuItems"
    @menuClick="handleMenuClick">
    <view class="trigger-area">
      深色主题菜单
    </view>
  </x-contextual-menu>
</template>

<style>
.dark-theme .longpress-menu {
  background: #2c3e50;
  border: 1rpx solid #34495e;
}

.dark-theme .menu-item text {
  color: #ecf0f1;
}

.dark-theme .menu-item:active {
  background-color: rgba(255, 255, 255, 0.1);
}
</style>

高级用法

嵌套使用

<template>
  <view class="container">
    <x-contextual-menu 
      :menuList="['文件操作', '编辑操作']"
      @menuClick="handleParentMenu">
      <view class="parent-area">
        父级菜单区域

        <x-contextual-menu 
          :menuList="['子菜单1', '子菜单2']"
          @menuClick="handleChildMenu">
          <view class="child-area">
            子级菜单区域
          </view>
        </x-contextual-menu>
      </view>
    </x-contextual-menu>
  </view>
</template>

插件如果对你有帮助给个好评吧~

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问