Skip to content

Popover 弹出框

在触发元素附近展示补充信息或轻量操作。

命令行安装

bash
npx @loongship-kit/ui add popover button input

组件结构

角色组件职责使用条件
根组件Popover管理显示状态和焦点行为必需
触发与锚点PopoverTriggerPopoverAnchor打开浮层或指定定位锚点按交互方式选用
内容结构PopoverPortalPopoverContent传送、定位并承载浮层内容内容组件必需
关闭与装饰PopoverClosePopoverArrow关闭浮层或展示定位箭头按需

基础用法

查看代码
vue
<script setup lang="ts">
import { Button } from '@/components/loongship/button'
import {
  Popover,
  PopoverArrow,
  PopoverContent,
  PopoverPortal,
  PopoverTrigger
} from '@/components/loongship/popover'
</script>

<template>
  <Popover>
    <PopoverTrigger as-child>
      <Button variant="outline">查看船舶状态</Button>
    </PopoverTrigger>
    <PopoverPortal>
      <PopoverContent>
        <strong>EVER GIVEN</strong>
        <p>IMO 9811000 · 航行中</p>
        <PopoverArrow />
      </PopoverContent>
    </PopoverPortal>
  </Popover>
</template>

轻量表单

查看代码
vue
<template>
  <Popover>
    <PopoverTrigger as-child><Button>修改目的港</Button></PopoverTrigger>
    <PopoverPortal>
      <PopoverContent align="start">
        <label class="popover-demo-form"><span>目的港</span><Input v-model="destination" /></label>
        <div class="popover-demo-actions">
          <PopoverClose as-child><Button size="sm">保存</Button></PopoverClose>
        </div>
        <PopoverArrow />
      </PopoverContent>
    </PopoverPortal>
  </Popover>
</template>

受控状态

Open: false
查看代码
vue
<template>
  <div class="vp-demo-showcase-column">
    <Popover v-model:open="open">
      <PopoverTrigger as-child><Button variant="outline">打开提醒</Button></PopoverTrigger>
      <span>Open: {{ open }}</span>
      <PopoverPortal>
        <PopoverContent side="right">
          该船预计在 24 小时内抵达目的港。
          <div class="popover-demo-actions">
            <PopoverClose as-child><Button size="sm">知道了</Button></PopoverClose>
          </div>
          <PopoverArrow />
        </PopoverContent>
      </PopoverPortal>
    </Popover>
  </div>
</template>

API

Popover(主组件)

属性

属性类型默认值说明
v-model:openboolean-受控显示状态
defaultOpenbooleanfalse非受控模式的初始状态
modalbooleanfalse是否禁用外部交互

事件

事件参数说明
update:openvalue: boolean显示状态改变时触发

插槽

插槽参数说明
default{ open: boolean, close: () => void }浮层结构

子组件

PopoverTrigger / PopoverClose / PopoverAnchor — 触发、关闭与定位锚点

属性

属性类型默认值说明
asstring | Component-渲染元素
asChildbooleanfalse合并到唯一子元素

插槽

组件插槽参数说明
PopoverTriggerdefault打开按钮内容
PopoverClosedefault关闭按钮内容
PopoverAnchordefault自定义锚点
PopoverPortal — 浮层传送容器

属性

属性类型默认值说明
tostring | HTMLElement'body'Teleport 目标
disabledbooleanfalse是否禁用 Teleport
deferbooleanfalse是否延迟解析目标

插槽

插槽参数说明
default浮层传送内容
PopoverContent — 浮层内容与定位

属性

属性类型默认值说明
side'top' | 'right' | 'bottom' | 'left''bottom'展开方向
sideOffsetnumber4与锚点的距离
align'start' | 'center' | 'end''center'对齐方式
alignOffsetnumber0对齐偏移
avoidCollisionsbooleantrue是否自动避让视口边缘
collisionPaddingnumber | object0碰撞检测边距
sticky'partial' | 'always''partial'锚点离屏时的定位策略
hideWhenDetachedbooleanfalse锚点完全离屏时是否隐藏
forceMountbooleanfalse关闭时仍挂载,便于自定义动画
disableOutsidePointerEventsbooleanfalse是否禁用外部指针交互
classClassValue-自定义类名

事件

事件参数说明
escapeKeyDownKeyboardEvent按下 Escape 时触发
pointerDownOutsidePointerDownOutsideEvent在内容外按下指针时触发
focusOutsideFocusOutsideEvent焦点移到内容外时触发
interactOutsidePointerDownOutsideEvent | FocusOutsideEvent在内容外发生交互时触发
openAutoFocusEvent打开后自动聚焦前触发
closeAutoFocusEvent关闭后恢复焦点前触发

插槽

插槽参数说明
default浮层内容
PopoverArrow — 定位箭头

属性

属性类型默认值说明
widthnumber10箭头宽度
heightnumber5箭头高度
roundedbooleanfalse是否使用圆角
asstring | Component'svg'渲染元素
asChildbooleanfalse合并到唯一子元素
classClassValue-自定义类名

插槽

插槽参数说明
default自定义箭头内容