当前位置:首页 > uni-app

uniapp 长按菜单

2026-03-05 00:06:12uni-app

长按菜单实现方法

在UniApp中实现长按菜单功能,可以通过以下几种方式完成:

使用@longpress事件监听 通过绑定@longpress事件来触发菜单显示,适合基础需求:

uniapp 长按菜单

<template>
  <view @longpress="showMenu">长按显示菜单</view>
  <view v-if="menuVisible" class="menu-popup">
    <text @click="handleMenu(1)">选项1</text>
    <text @click="handleMenu(2)">选项2</text>
  </view>
</template>

<script>
export default {
  data() {
    return {
      menuVisible: false
    }
  },
  methods: {
    showMenu() {
      this.menuVisible = true
    },
    handleMenu(index) {
      console.log('选择选项', index)
      this.menuVisible = false
    }
  }
}
</script>

使用uni.showActionSheet API 调用官方提供的底部操作菜单接口,样式统一且支持多端:

methods: {
  showActionMenu() {
    uni.showActionSheet({
      itemList: ['选项A', '选项B', '选项C'],
      success: (res) => {
        console.log('选中项索引:', res.tapIndex)
      }
    })
  }
}

自定义弹出菜单组件 创建可复用的自定义组件实现更灵活的菜单样式:

uniapp 长按菜单

<!-- components/long-press-menu.vue -->
<template>
  <view>
    <slot @longpress="toggleMenu"></slot>
    <view v-if="visible" class="custom-menu">
      <view v-for="(item,index) in items" :key="index" @click="selectItem(index)">
        {{ item.text }}
      </view>
    </view>
  </view>
</template>

<script>
export default {
  props: {
    items: Array
  },
  data() {
    return {
      visible: false
    }
  },
  methods: {
    toggleMenu() {
      this.visible = !this.visible
    },
    selectItem(index) {
      this.$emit('select', index)
      this.visible = false
    }
  }
}
</script>

注意事项

  • 在H5端自定义菜单时需注意z-index层级问题
  • 小程序平台部分API存在样式限制,需测试多端兼容性
  • 长按事件在iOS设备上可能有300ms延迟,可通过CSS解决:
    .menu-target {
    -webkit-touch-callout: none;
    user-select: none;
    }

扩展功能

实现带图标的菜单项:

uni.showActionSheet({
  itemList: ['★ 收藏', '⎘ 分享', '✎ 编辑'],
  success(e) {
    console.log(e.tapIndex)
  }
})

添加菜单取消回调:

uni.showActionSheet({
  itemList: ['选项1', '选项2'],
  fail(err) {
    console.log('取消选择', err)
  }
})

标签: 菜单uniapp
分享给朋友:

相关文章

uniapp使用axios无法请求

uniapp使用axios无法请求

uniapp中使用axios请求问题解决方案 在uniapp中使用axios可能会遇到跨域、请求失败或兼容性问题。以下是常见原因及解决方法: 检查axios安装与引入 确保已正确安装axios:…

uniapp 用法

uniapp 用法

uniapp 基本概念 uniapp 是一个基于 Vue.js 的跨平台开发框架,支持编译到 iOS、Android、H5 及小程序等多端。其核心特点是“一次开发,多端发布”,通过条件编译实现平台差异…

uniapp广播

uniapp广播

全局事件通信 在UniApp中实现广播功能可通过全局事件机制完成,适用于跨页面或组件通信。使用uni.$emit、uni.$on、uni.$off等方法实现事件的触发、监听与移除。 发送广播(触发事…

uniapp 日志

uniapp 日志

uniapp 日志管理方法 uniapp本身没有内置日志系统,但可以通过以下方式实现日志记录功能: 使用console.log输出日志 开发阶段可以直接使用console.log()、console…

混合uniapp

混合uniapp

混合 UniApp 开发模式 混合 UniApp 开发通常指将 UniApp 与其他原生技术(如原生 iOS/Android 或 Flutter)结合使用,以兼顾跨平台效率和原生性能。以下是常见的混合…

uniapp 拦截db

uniapp 拦截db

uniapp 拦截数据库操作 在 uniapp 中拦截数据库操作通常涉及对 uniCloud 数据库请求的拦截或修改。以下是几种常见方法: 使用云函数中间件 在云函数中创建一个中间件层,用于拦截和…