Popover 气泡卡片

点击/鼠标移入元素,弹出气泡式的卡片浮层。

何时使用

当目标元素有进一步的描述和相关操作时,可以收纳到卡片中,根据用户的操作行为进行展现。

Tooltip 的区别是,用户可以对浮层上的元素进行操作,因此它可以承载更复杂的内容,比如链接或按钮等。

代码演示

基本

最简单的用法,浮层的大小由内容区域决定。

Popover气泡卡片 - 图1

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Popover, Button } from 'choerodon-ui';
  4. const content = (
  5. <div>
  6. <p>Content</p>
  7. <p>Content</p>
  8. </div>
  9. );
  10. ReactDOM.render(
  11. <Popover content={content} title="Title">
  12. <Button type="primary">Hover me</Button>
  13. </Popover>,
  14. document.getElementById('container'));

三种触发方式

鼠标移入、聚集、点击。

Popover气泡卡片 - 图2

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Popover, Button } from 'choerodon-ui';
  4. const content = (
  5. <div>
  6. <p>Content</p>
  7. <p>Content</p>
  8. </div>
  9. );
  10. ReactDOM.render(
  11. <div>
  12. <Popover content={content} title="Title" trigger="hover">
  13. <Button>Hover me</Button>
  14. </Popover>
  15. <Popover content={content} title="Title" trigger="focus">
  16. <Button>Focus me</Button>
  17. </Popover>
  18. <Popover content={content} title="Title" trigger="click">
  19. <Button>Click me</Button>
  20. </Popover>
  21. </div>,
  22. document.getElementById('container'));

位置

位置有十二个方向。

Popover气泡卡片 - 图3

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Popover, Button } from 'choerodon-ui';
  4. const text = <span>Title</span>;
  5. const content = (
  6. <div>
  7. <p>Content</p>
  8. <p>Content</p>
  9. </div>
  10. );
  11. const buttonWidth = 70;
  12. ReactDOM.render(
  13. <div className="demo">
  14. <div style={{ marginLeft: buttonWidth, whiteSpace: 'nowrap' }}>
  15. <Popover placement="topLeft" title={text} content={content} trigger="click">
  16. <Button>TL</Button>
  17. </Popover>
  18. <Popover placement="top" title={text} content={content} trigger="click">
  19. <Button>Top</Button>
  20. </Popover>
  21. <Popover placement="topRight" title={text} content={content} trigger="click">
  22. <Button>TR</Button>
  23. </Popover>
  24. </div>
  25. <div style={{ width: buttonWidth, float: 'left' }}>
  26. <Popover placement="leftTop" title={text} content={content} trigger="click">
  27. <Button>LT</Button>
  28. </Popover>
  29. <Popover placement="left" title={text} content={content} trigger="click">
  30. <Button>Left</Button>
  31. </Popover>
  32. <Popover placement="leftBottom" title={text} content={content} trigger="click">
  33. <Button>LB</Button>
  34. </Popover>

从浮层内关闭

使用 visible 属性控制浮层显示。

Popover气泡卡片 - 图4

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Popover, Button } from 'choerodon-ui';
  4. class App extends React.Component {
  5. state = {
  6. visible: false,
  7. }
  8. hide = () => {
  9. this.setState({
  10. visible: false,
  11. });
  12. }
  13. handleVisibleChange = (visible) => {
  14. this.setState({ visible });
  15. }
  16. render() {
  17. return (
  18. <Popover
  19. content={<a onClick={this.hide}>Close</a>}
  20. title="Title"
  21. trigger="click"
  22. visible={this.state.visible}
  23. onVisibleChange={this.handleVisibleChange}
  24. >
  25. <Button type="primary">Click me</Button>

箭头指向

设置了 arrowPointAtCenter 后,箭头将指向目标元素的中心。

Popover气泡卡片 - 图5

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Popover, Button } from 'choerodon-ui';
  4. const text = <span>Title</span>;
  5. const content = (
  6. <div>
  7. <p>Content</p>
  8. <p>Content</p>
  9. </div>
  10. );
  11. ReactDOM.render(
  12. <div>
  13. <Popover placement="topLeft" title={text} content={content}>
  14. <Button>Align edge / 边缘对齐</Button>
  15. </Popover>
  16. <Popover placement="topLeft" title={text} content={content} arrowPointAtCenter>
  17. <Button>Arrow points to center / 箭头指向中心</Button>
  18. </Popover>
  19. </div>,
  20. document.getElementById('container'));

API

参数说明类型默认值
content卡片内容string|ReactNode
title卡片标题string|ReactNode

更多属性请参考 Tooltip

注意

请确保 Popover 的子元素能接受 onMouseEnteronMouseLeaveonFocusonClick 事件。