更新记录

1.0.0(2026-01-30) 下载此版本

  • 双模式支持
    • normal:长按直接弹出菜单(适用于气泡、卡片等整体操作)。
    • selection:长按出现原生光标,拖动选择文字后弹出菜单(支持 App 和 H5)。
  • 智能定位:气泡自动判断显示在上方或下方,防止溢出屏幕。
  • 原生体验:Selection 模式下屏蔽系统原生菜单,仅显示自定义菜单,支持拖动光标调整范围。
  • 自定义菜单:支持配置任意菜单项,内置“复制”功能。

平台兼容性

uni-app(3.6.16)

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

x-long-press-menu 长按菜单组件

类似于微信消息的长按弹出菜单组件。支持两种模式:普通长按模式(整体操作)和 文本选择模式(自由选词)。

✨ 特性

  • 双模式支持
    • normal:长按直接弹出菜单(适用于气泡、卡片等整体操作)。
    • selection:长按出现原生光标,拖动选择文字后弹出菜单(支持 App 和 H5)。
  • 智能定位:气泡自动判断显示在上方或下方,防止溢出屏幕。
  • 原生体验:Selection 模式下屏蔽系统原生菜单,仅显示自定义菜单,支持拖动光标调整范围。
  • 自定义菜单:支持配置任意菜单项,内置“复制”功能。

📦 引入

<script>
import xLongPressMenu from '@/components/x-long-press-menu/x-long-press-menu.vue';

export default {
  components: {
    xLongPressMenu
  }
}
</script>

📖 基本用法

1. 普通长按模式 (Normal Mode)

适用于整体操作,如消息气泡、图片、卡片等。

<x-long-press-menu 
  content="这是一段文本内容" 
  :menus="[{ text: '复制', value: 'copy' }, { text: '删除', value: 'delete' }]"
  @menu-click="handleMenuClick"
>
  <view class="bubble">长按我弹出菜单</view>
</x-long-press-menu>

2. 文本选择模式 (Selection Mode)

适用于文章详情、富文本等需要自由选择部分文字的场景。 注意:该模式依赖 renderjs,仅支持 App-VueH5 平台。小程序端请使用 Normal 模式。

<x-long-press-menu 
  mode="selection"
  :menus="[{ text: '复制', value: 'copy' }, { text: '搜索', value: 'search' }]"
  @menu-click="handleMenuClick"
>
  <view class="article">
    <text>长按这段文字,会出现选择光标,拖动选择后弹出菜单。</text>
  </view>
</x-long-press-menu>

⚙️ API

Props

参数 类型 默认值 说明
mode String 'normal' 模式。'normal' (长按弹窗) 或 'selection' (选词弹窗,仅App/H5)
menus Array [{ text: '复制', value: 'copy' }] 菜单项列表,格式见下文
content String '' 1. normal 模式下为要复制的完整内容。
2. selection 模式下如果不传,默认选中为空。

Menu Item Format

[
  { text: '复制', value: 'copy' }, // value='copy' 会自动触发剪贴板复制
  { text: '转发', value: 'forward' },
  { text: '删除', value: 'delete' }
]

Events

事件名 说明 回调参数
menu-click 点击菜单项时触发 item: 菜单对象 (包含 content 字段,即当前选中的文本)
longpress 长按触发 (仅 normal 模式) event: 原生事件对象

⚠️ 注意事项

  1. 平台兼容性selection 模式使用了 renderjs 来获取 DOM 选区信息,因此不支持小程序。在小程序端建议强制使用 normal 模式。
  2. 样式干扰:组件内部为了实现 App 端屏蔽系统菜单,对 CSS 的 user-select 做了特殊处理。尽量不要覆盖 .x-long-press-triggeruser-select 样式。
  3. 层级问题:气泡菜单使用了 fixed 定位和 z-index: 999,通常能覆盖大部分元素。如有遮挡请检查父级 z-index

💡 示例代码

请参考示例页面:/pages/long-press-demo/index.vue

隐私、权限声明

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

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

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

许可协议

MIT协议

暂无用户评论。