Popover

预计阅读时间: 3 分钟

用于显示锚定到触发元素的上下文内容的弹出框组件。

结构

<Popover.Root>
  <Popover.Trigger>Open</Popover.Trigger>
  <Popover.Popup>
    <Popover.Arrow />
    Content
  </Popover.Popup>
</Popover.Root>

行为

显示锚定到触发元素的上下文内容。默认情况下,点击打开,点击外部、按下 Escape 或触发器失去焦点时关闭。

设置 openOnHover 可在指针悬停时打开而非点击。使用 delaycloseDelay 控制悬停交互的时序。

sidealign 属性控制弹出框相对于触发器的位置。弹出框会自动重新定位以保持在视口边界内。

在 React 中,组件由四个部分组成:Root 管理状态,Trigger 切换弹出框,Popup 包含内容,Arrow 渲染方向箭头。

样式

使用 CSS 自定义属性设置定位偏移:

.popover {
  --media-popover-side-offset: 8px;
  --media-popover-align-offset: 0px;
}

根据打开状态和过渡阶段设置样式:

.popover[data-open] .popup {
  display: block;
}
.popover[data-starting-style] .popup {
  opacity: 0;
}
.popover[data-ending-style] .popup {
  opacity: 0;
}

无障碍

触发器接收反映打开状态的 aria-expanded。当设置 modal 时,弹出框接收 aria-modal="true"。默认启用通过 Escape 关闭,可通过 closeOnEscape={false} 禁用。

示例

基本用法

import { Popover } from '@videojs/react';

function Menu() {
  return (
    <Popover.Root>
      <Popover.Trigger>Settings</Popover.Trigger>
      <Popover.Popup>
        <Popover.Arrow />
        <p>Menu content here</p>
      </Popover.Popup>
    </Popover.Root>
  );
}

API 参考

Popover.Root 属性

属性类型默认值描述
align"start" | "center" | "end""center"弹出框相对于触发器的对齐方式
closeDelaynumber0关闭延迟(毫秒)
closeOnEscapebooleantrue是否在按下 Escape 时关闭
closeOnOutsideClickbooleantrue是否在点击外部时关闭
defaultOpenbooleanfalse初始是否打开
delaynumber0打开延迟(毫秒)
modalbooleanfalse是否为模态弹出框
openboolean-受控的打开状态
openOnHoverbooleanfalse是否在悬停时打开
side"top" | "right" | "bottom" | "left""bottom"弹出框相对于触发器的位置

状态

状态类型描述
openboolean弹出框是否打开

Data 属性

属性描述
data-open-弹出框打开时存在
data-side"top" | "right" | "bottom" | "left"弹出框当前所在的一侧
data-align"start" | "center" | "end"弹出框的对齐方式
data-starting-style-打开动画开始时存在
data-ending-style-关闭动画开始时存在

CSS 自定义属性

属性描述
--media-popover-side-offset弹出框与触发器之间的侧边偏移
--media-popover-align-offset弹出框与触发器之间的对齐偏移

参见