自制微信小程序popover菜单,气泡悬浮弹窗

效果图

核心思想:

通过设置列表项为相对布局,菜单为绝对布局,并利用正方形旋转实现小三角效果,根据点击位置动态调整菜单显示。

源码:直接能用

js 复制代码
<template>
  <view class="container">
    <button @click="toggleMenu">点击显示气泡菜单</button>

    <view v-if="isMenuVisible" class="bubble-menu" @click="closeMenu">
      <view class="square"></view>
      <view class="menu-item" @click.stop="handleMenuItemClick('item1')">菜单项 1</view>
      <view class="menu-item" @click.stop="handleMenuItemClick('item2')">菜单项 2</view>
      <view class="menu-item" @click.stop="handleMenuItemClick('item3')">菜单项 3</view>
    </view>
  </view>
</template>

<script setup>

const isMenuVisible = ref(true)
const toggleMenu = () => {
  isMenuVisible.value = !isMenuVisible.value
}

const closeMenu = () => {
  isMenuVisible.value = false
}

const handleMenuItemClick = item => {
  console.log(`点击了 ${item}`)
  closeMenu() // 点击后关闭菜单
}
</script>

<style lang="scss" scoped>
.container {
  position: relative;
  padding: 20px;
}

.bubble-menu {
  position: absolute;
  top: 50px; /* 根据需要调整 */
  left: 0;
  background: white;
  border: 1px solid #ccc;
  border-radius: 5px;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
  z-index: 1000;
  padding: 10px;
}
.square {
  position: absolute;
  top: -10px; /* 三角形位置调整 */
  left: 10px; /* 三角形位置调整 */
  width: 30rpx;
  height: 30rpx;
  border: 1px solid #ccc;
  border-bottom-color: transparent;
  border-right-color: transparent;
  transform: rotate(45deg);
  background: #ffffff;
}

.menu-item {
  padding: 10px 20px;
  cursor: pointer;
}

.menu-item:hover {
  background-color: #f0f0f0;
}
</style>
相关推荐
一涯13 分钟前
用python写一个抓取股市关键词的程序
前端·python
情绪的稳定剂_精神的锚18 分钟前
git提交前修改文件校验
前端
Moonbit23 分钟前
MoonBit 作者寄语 2025 级清华深圳新生
前端·后端·程序员
前端的阶梯25 分钟前
开发一个支持支付功能的微信小程序的注意事项,含泪送上
前端·后端·全栈
Juchecar28 分钟前
Node.js package.json 配置详解 + TypeScript + ES Module 集成指南
javascript
李明卫杭州33 分钟前
深入理解CSS变量(Custom Properties)
前端·javascript
CoderLiu36 分钟前
AI提示词工程优化指南:8个技巧,释放大语言模型的全部潜力
前端·人工智能·ai编程
咕噜分发企业签名APP加固彭于晏36 分钟前
腾讯元器的优点是什么
前端·后端
一枚前端小能手1 小时前
💫 回调套回调写到崩溃,异步编程其实可以很优雅
前端·javascript
用户47949283569151 小时前
深入理解JavaScript:手写实现Array.prototype.push方法
前端·javascript