UNPKG

@tanzhenxing/zx-popover

Version:

弹出框组件,在元素旁边显示浮层,支持不同的触发方式和位置

155 lines (122 loc) 4.24 kB
# zx-popover 弹出框 弹出框是在元素旁边显示浮层,支持不同的触发方式和位置,常用于展示详细信息或操作菜单。 ## 基础用法 弹出框组件基于 `slot` 插槽和 `reference` 插槽实现,通过 `trigger` 属性指定触发方式,支持 `hover`、`click`、`focus`、`contextmenu` 和 `manual` 五种触发方式。 ```vue <zx-popover content="这是弹出框内容" title="标题" placement="top"> <template #reference> <button>hover触发</button> </template> </zx-popover> <zx-popover content="这是弹出框内容" title="标题" placement="bottom" trigger="click"> <template #reference> <button>click触发</button> </template> </zx-popover> ``` ## 弹出位置 通过 `placement` 属性控制弹出位置,支持12个不同方向: - `top`、`top-start`、`top-end` - `bottom`、`bottom-start`、`bottom-end` - `left`、`left-start`、`left-end` - `right`、`right-start`、`right-end` ```vue <zx-popover content="top-start" placement="top-start"> <template #reference> <button>top-start</button> </template> </zx-popover> ``` ## 主题 通过 `effect` 属性控制主题,支持 `light` 和 `dark` 两种主题: ```vue <zx-popover content="浅色主题" title="Light" effect="light"> <template #reference> <button>浅色主题</button> </template> </zx-popover> <zx-popover content="深色主题" title="Dark" effect="dark"> <template #reference> <button>深色主题</button> </template> </zx-popover> ``` ## 自定义内容 除了使用 `content` 属性设置简单文本内容外,还可以使用默认插槽自定义复杂内容: ```vue <zx-popover placement="right" trigger="click" width="400"> <template #reference> <button>自定义内容</button> </template> <view class="custom-content"> <view class="custom-title">自定义标题</view> <view class="custom-body"> <view class="custom-item"> <text>可以自定义任意内容</text> </view> <view class="custom-footer"> <button @click="handleConfirm">确认</button> <button @click="handleCancel">取消</button> </view> </view> </view> </zx-popover> ``` ## API ### Props | 参数 | 说明 | 类型 | 默认值 | | --- | --- | --- | --- | | show | 是否显示弹出框 | Boolean | false | | trigger | 触发方式 | String | hover | | title | 标题 | String | - | | content | 显示的内容 | String | - | | placement | 出现位置 | String | top | | showArrow | 是否显示箭头 | Boolean | true | | width | 宽度 | Number/String | 300 | | disabled | 是否禁用 | Boolean | false | | offset | 出现位置的偏移量 | Number/String | 0 | | zIndex | 层级 | Number/String | 10090 | | closeOnClickOutside | 点击外部是否关闭 | Boolean | true | | closeOnClickOverlay | 点击遮罩是否关闭 | Boolean | true | | showAfter | 延迟出现,单位毫秒 | Number/String | 0 | | hideAfter | 延迟消失,单位毫秒 | Number/String | 200 | | effect | 主题 | String | light | | overlay | 是否显示遮罩 | Boolean | false | | duration | 动画时长,单位ms | Number/String | 300 | ### Events | 事件名 | 说明 | 回调参数 | | --- | --- | --- | | show | 显示时触发 | - | | hide | 隐藏时触发 | - | | beforeEnter | 显示动画播放前触发 | - | | afterEnter | 显示动画播放完毕后触发 | - | | beforeLeave | 隐藏动画播放前触发 | - | | afterLeave | 隐藏动画播放完毕后触发 | - | ### Slots | 插槽名 | 说明 | | --- | --- | | default | 弹出框内容 | | reference | 触发弹出框显示的元素 | ### 方法 通过ref调用实例方法: | 方法名 | 说明 | 参数 | | --- | --- | --- | | show | 显示弹出框 | - | | hide | 隐藏弹出框 | - | ```vue <template> <zx-popover ref="popoverRef"> <!-- 内容 --> </zx-popover> </template> <script setup> import { ref } from 'vue'; const popoverRef = ref(null); function showPopover() { popoverRef.value.show(); } function hidePopover() { popoverRef.value.hide(); } </script> ```