当前位置: 首页 > news >正文

完美解决vant浮动气泡+弹出菜单

使用框架:
vue3,vant4

项目需求:
需要有一个浮动气泡,点击弹出导航菜单

遇到的问题:
1. 使用van-floating-bubble包裹van-popover,但点击后只会重复显示不能隐藏
2. popover位置固定,不能根据floating-bubble改变位置

解决:
1. 去掉popover绑定的v-model:show,改为使用show属性
2. 使用floating-bubble的offsetChange事件,获取当前的x和y,判断当前浮动气泡在什么位置,来修改popover的placement

代码:
template:

<!-- 磁吸导航 -->
<van-floating-bubble @offset-change="onOffsetChange" axis="xy" magnetic="x" icon="chat" @click.stop.prevent="showPopover = !showPopover"><van-icon class-prefix="ti" name="baseline-density-medium" size="24" /><van-popover :show="showPopover" :placement="popoverPlacement" :offset="[10, 40]" :show-arrow="false"@closed="showPopover=false"><ul><template v-for="item in childTabList" :key="item"><li>{{ item.name }}</li></template></ul></van-popover>
</van-floating-bubble>

javascript:
 

<script setup>
const showPopover = ref(false)
// 磁吸偏移量
const popoverPlacement = ref('left-end')
function onOffsetChange(offset) {const viewportWidth = window.innerWidth;const viewportHeight = window.innerHeight;const { x, y } = offset;const horizontalCenter = viewportWidth / 2;const verticalCenter = viewportHeight / 2;// 判断 x, y 来设置 Popover 的弹出位置if (y > verticalCenter) {// 靠近底部if (x > horizontalCenter) {// 气泡在屏幕右下角,Popover 向上弹出并靠右popoverPlacement.value = 'top-end';} else {// 气泡在屏幕左下角,Popover 向上弹出并靠左popoverPlacement.value = 'top-start';}} else {// 靠近顶部if (x > horizontalCenter) {// 气泡在屏幕右上角,Popover 向下弹出并靠右popoverPlacement.value = 'bottom-end';} else {// 气泡在屏幕左上角,Popover 向下弹出并靠左popoverPlacement.value = 'bottom-start';}}
}
</script>

http://www.lryc.cn/news/447897.html

相关文章:

  • SpringSecurity -- 入门使用
  • C语言习题~day33
  • 作业报告┭┮﹏┭┮(Android反调试)
  • 在 Delphi BSD11中安装 DCU 格式的第三方组件库
  • 综合题第二题(路由器的配置)
  • 人工智能概览
  • [vulnhub] Prime 1
  • JavaSE——lombok、juint单元测试、断言
  • 商标价值如何评估与增值?
  • linux命令之firewall-cmd用法
  • 深入浅出CSS盒子模型
  • 字符编码发展史4 — Unicode与UTF-8
  • 【flink】之如何消费kafka数据并读写入redis?
  • 搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(二)-索引
  • 离散化算法
  • 基于ollama的本地RAG实践
  • 安卓开发板_MTK开发板_联发科开发评估套件Demo板接口介绍
  • 代码随想录冲冲冲 Day58 图论Part9
  • UnityHub下载任意版本的Unity包
  • 网站服务器怎么计算同时在线人数?
  • [spring]MyBatis介绍 及 用MyBatis注解操作简单数据库
  • Ks渲染做汽车动画吗?汽车本地渲染与云渲染成本分析
  • AI智能时代:哪款编程工具让你的工作效率翻倍?
  • 这五本大模型书籍,让你从大模型零基础到精通,非常详细收藏我这一篇就够了
  • 面试经典150题 堆
  • day-62 每种字符至少取 K 个
  • 免费好用!AI声音克隆神器,超级简单,10秒就能克隆任何声音!(附保姆级教程)
  • LeetCode146 LRU缓存
  • 【Java】包装类【主线学习笔记】
  • 华为HarmonyOS地图服务 11 - 如何在地图上增加点注释?