覆盖层
一组用于定位精美覆盖层、工具提示、弹出框以及您需要的任何其他内容的组件。
概述
关于 React-Bootstrap 覆盖层组件的一些注意事项。
- 覆盖层依赖于第三方库 Popper.js。它会自动包含在 React-Bootstrap 中,但您应该参考 API 以获得更高级的用例。
<Tooltip>
和<Popover>
组件不会自行定位。相反,<Overlay>
(或<OverlayTrigger>
)组件会注入ref
和style
属性。- Tooltip 期望
<Overlay>
组件注入特定的属性。 disabled
元素的工具提示必须在包装元素上触发。
覆盖层
Overlay
是用于定位和控制工具提示可见性的基本组件。它是 Popper.js 的包装器,它添加了对过渡和可见性切换的支持。
创建覆盖层
覆盖层至少包含两个元素,即“覆盖层”,要定位的元素,以及“目标”,覆盖层相对于其定位的元素。您还可以拥有一个“箭头”元素,例如工具提示和弹出框,但这可选。请务必查看 Popper 文档以了解有关注入属性的更多详细信息。
自定义叠加渲染
Overlay
注入了一些你可以用来自定义渲染行为的 props。在某些情况下,你需要在 Popper
测量和定位之前显示叠加层。在 React-Bootstrap 中,工具提示和弹出框会设置不透明度和位置,以避免叠加层初始定位不正确的问题。查看 Tooltip 实现,了解如何实现这一点的示例。
OverlayTrigger
由于上述模式非常常见,但很冗长,我们包含了 <OverlayTrigger>
组件来帮助处理常见用例。它甚至具有延迟显示或隐藏的功能,以及一些你可以混合和匹配的不同“触发”事件。
请注意,触发组件必须能够接受 ref,因为 <OverlayTrigger>
会尝试添加一个。你可以使用 forwardRef() 来处理函数组件。
自定义触发行为
对于更高级的行为,<OverlayTrigger>
接受一个函数子组件,该子组件传入注入的 ref
和与配置的 trigger
prop 相对应的事件处理程序。
你可以手动将 props 应用于你想要的任何元素,或者将它们拆分。下面的示例展示了如何将叠加层定位到与触发其可见性的元素不同的元素。
使用 OverlayTrigger 的函数形式可以避免 React.findDOMNode
调用,对于那些试图遵守严格模式的人来说。
工具提示
一个工具提示组件,提供比锚标签title
属性更时尚的替代方案。
示例
将鼠标悬停在下面的链接上,查看工具提示。
您可以将注入的Overlay
属性直接传递给 Tooltip 组件。
或者将 Tooltip 元素传递给OverlayTrigger
。
弹出框
一个弹出框组件,类似于 iOS 中的弹出框。
示例
与<Tooltip>
一样,您可以控制弹出框的位置。
禁用元素
具有disabled
属性的元素不可交互,这意味着用户无法将鼠标悬停或单击它们来触发弹出框(或工具提示)。作为解决方法,您需要从包装<div>
或<span>
中触发叠加层,并覆盖禁用元素上的pointer-events
。
更改容器
您可以指定一个container
来控制叠加层附加到的 DOM 元素。当样式与您的叠加层冲突时,这尤其有用。
动态更新位置
由于我们无法知道叠加层何时改变大小,因此要重新定位它,您需要在需要更新叠加层位置以响应更改时采取手动操作。
为此,Overlay 组件还注入了一个popper
属性,其中包含一个scheduleUpdate()
方法,叠加层组件可以使用它来重新定位自己。