自制微信小程序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>
相关推荐
高斯林.神犇35 分钟前
javaWeb基础
前端·chrome
用户214118326360239 分钟前
dify案例分享-Qwen3-VL+Dify:从作业 OCR 到视频字幕,多模态识别工作流一步教,附体验链接
前端
南屿im1 小时前
把代码变成“可改的树”:一文读懂前端 AST 的原理与实战
前端·javascript
mxd018481 小时前
最常用的js加解密之RSA-SHA256 加密算法简介与 jsjiami 的结合使用指南
开发语言·javascript·ecmascript
charlie1145141911 小时前
从《Life of A Pixel》来看Chrome的渲染机制
前端·chrome·学习·渲染·浏览器·原理分析
HWL56791 小时前
输入框内容粘贴时 &nbsp; 字符净化问题
前端·vue.js·后端·node.js
梦6501 小时前
JQ 的 AJAX 请求方法
前端·ajax
ObjectX前端实验室1 小时前
【react18原理探究实践】分层解析React Fiber 核心工作流程
前端·react.js
IT_陈寒2 小时前
「JavaScript 性能优化:10个让V8引擎疯狂提速的编码技巧」
前端·人工智能·后端
ObjectX前端实验室3 小时前
【react18原理探究实践】scheduler原理之Task 完整生命周期解析
前端·react.js