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

uniapp 类似popover气泡下拉框组件

需要实现一个app端类似于elementUI上popover组件的下拉效果,发现uniapp和uview没找到合适的

以下组件仅测试过app,且细节处需要自行调整

描述: 点击更多按钮后弹出下拉框,点击其他区域会关闭下拉框

效果:

组件:

<!-- 下拉菜单组件 -->
<template><view class="custom-picker"><view class="picker-header" @click="togglePicker">更多<text class="arrow" :class="{ 'arrow-up': showPicker }"></text></view><view v-if="showPicker" class="picker-options"><viewv-for="(item, index) in items":key="index"@click="selectItem(item)">{{ item.label }}</view></view><!-- 遮罩层,用于点击关闭 --><viewv-if="showPicker"class="mask"@click="closePicker"catchtouchmove></view></view>
</template><script>
export default {props: {items: {type: Array,default: () => [],},},data() {return {showPicker: false,selectedItem: '',}},methods: {togglePicker() {this.showPicker = !this.showPicker},closePicker() {this.showPicker = false},selectItem(item) {this.selectedItem = itemthis.showPicker = falsethis.$emit('change', item)},},
}
</script><style scoped>
.custom-picker {position: relative;z-index: 100;
}
.picker-header {display: flex;justify-content: center;align-items: center;cursor: pointer;
}
.picker-options {position: absolute;width: 200rpx;top: 60rpx;left: -74rpx;border: 1px solid #ccc;border-radius: 5px;background-color: #fff;z-index: 101;color: #333;box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
}
.picker-options view {padding: 10px;border-bottom: 1px solid #eee;
}
.picker-options view:last-child {border-bottom: none;
}
.arrow {margin-left: 8rpx;width: 0;height: 0;border-left: 12rpx solid transparent;border-right: 12rpx solid transparent;border-top: 16rpx solid #ffffff;transition: transform 0.3s;position: relative;top: 2rpx;
}
.arrow-up {transform: rotate(180deg);top: -2rpx;
}
.mask {position: fixed;top: 0;left: 0;right: 0;bottom: 0;z-index: 99;background-color: transparent;
}
</style>

调用

 <custom-picker :items="items" @change="onCustomPickerChange"></custom-picker>items: [{ label: '删除' },{ label: '详情' },{ label: '停用' },],onCustomPickerChange(e) {console.log(e)},

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

相关文章:

  • Maven和Gradle在构建项目上的区别
  • uniapp Android App集成支付宝的扫码组件mPaaS
  • Linux驱动25 --- RkMedia音频API使用增加 USB 音视频设备
  • Linux驱动24 --- RkMedia 视频 API 使用
  • 技术文章推荐|解析 ESA 零售交易方案(技术分析+案例拆解)
  • 基于k8s环境下的pulsar常用命令(下)
  • JavaWeb02——基础标签及样式(黑马视频笔记)
  • 203.移除链表元素 707.设计链表 206.反转链表
  • 8.5 位|归并|递归
  • 腾讯云CodeBuddy AI IDE+CloudBase AI ToolKit打造理财小助手网页
  • C++ - 基于多设计模式下的同步异步日志系统(11w字)
  • 使用ProxySql实现MySQL的读写分离
  • 【模电笔记】—— 直流稳压电源——整流、滤波电路
  • C++返回值优化(RVO):高效返回对象的艺术
  • LINUX 85 SHElL if else 前瞻 实例
  • 解锁n8n:开启自动化工作流的无限可能
  • 数据挖掘,到底是在挖掘什么?
  • Leetcode-2080区间内查询数字的频率
  • 417页PDF | 2025年“人工智能+”行业标杆案例荟萃
  • 机器学习——集成学习(Ensemble Learning)详解:原理、方法与实战应用
  • 深度拆解Dify:开源LLM开发平台的架构密码与技术突围
  • 服务器端口连通性的测试工具和方法
  • ApacheCon Asia 2025 中国开源年度报告:Apache Doris 国内第一
  • Spring Boot 整合 Thymeleaf
  • 全球氨运输罐行业发展现状及趋势分析报告
  • makefile的使用与双向链表
  • Docker Compose管理新范式:可视化控制台结合cpolar提升容器编排效率?
  • Docker使用的常见问题
  • 解决微信小程序中camera组件被view事件穿透触发对焦以及camera的bindtap事件
  • 性能优化篇:SQL数据库查表速度优化