自制微信小程序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>
相关推荐
遇见~未来6 小时前
JavaScript数组全解析:从本质到高级技巧
开发语言·前端·javascript
哈__6 小时前
基础入门 React Native 鸿蒙跨平台开发:TabBar 底部导航栏
javascript·react native·react.js
lili-felicity6 小时前
React Native 鸿蒙跨平台开发:Animated 实现鸿蒙端组件的左右滑动动画
javascript·react native·react.js
石像鬼₧魂石6 小时前
80 端口(Web 服务)渗透测试完整总结(含踩坑 + 绕过 + 实战流程)
linux·运维·服务器·前端·网络·阿里云
哈__6 小时前
React Native 鸿蒙跨平台开发:StatusBar 状态栏组件
javascript·react native·react.js
C_心欲无痕6 小时前
nginx - 核心概念
运维·前端·nginx
开开心心_Every6 小时前
安卓做菜APP:家常菜谱详细步骤无广简洁
服务器·前端·python·学习·edge·django·powerpoint
前端_Danny6 小时前
用 ECharts markLine 实现节假日标注
前端·信息可视化·echarts
古城小栈6 小时前
Rust 丰富&好用的 格式化语法
前端·算法·rust
丢,捞仔6 小时前
uni-app上架应用添加权限提示框
前端·javascript·uni-app