自制微信小程序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>
相关推荐
To_OC6 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
腻害兔6 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
不好听6136 小时前
从一行 JSX 到屏幕像素:前端开发者必须懂的浏览器渲染管线
前端
恒拓高科WorkPlus6 小时前
企业级内网即时通讯建设模型:BeeWorks内网IM四层架构
前端
前端小李子7 小时前
前端环境变量裸奔?我用 EnvShield 给它穿了件防弹衣
前端
youtootech7 小时前
HarmonyOS《柚兔学伴》项目实战25-我的页面、Web 嵌入与项目总结
前端·华为·harmonyos
小林ixn8 小时前
从零到一理解 React 父子组件通信:手写一个 Todo 应用带你彻底搞懂单向数据流
前端·javascript·react.js
醇氧9 小时前
CountDownLatch / CyclicBarrier / Semaphore 面试高频问答清单
前端·面试·职场和发展
窝子面10 小时前
手搓最简前后端协作-node
javascript·数据库