Popup 弹出层

从顶部或底部浮出的模态,提供标题和关闭按钮,展示和当前内容相关的信息或提供相关操作。

规则

  • 提供清晰的关闭按钮。

  • Popup 会打断用户操作,所以用在重要的时候, eg.买入股票。

代码演示

向下弹出效果

Popup 向下弹出效果

  1. import { Popup, List, Button, InputItem } from 'antd-mobile';
  2. const PopupContent = React.createClass({
  3. getInitialState() {
  4. return {
  5. sel: '',
  6. };
  7. },
  8. onSel(sel) {
  9. this.setState({ sel });
  10. this.props.onClose();
  11. },
  12. render() {
  13. return (
  14. <List renderHeader={() => `账户总览,选择了:${this.state.sel}`}>
  15. <List.Item
  16. thumb="https://zos.alipayobjects.com/rmsportal/dNuvNrtqUztHCwM.png"
  17. onClick={() => { this.onSel('东吴证券'); }}
  18. >东吴证券</List.Item>
  19. <List.Item
  20. thumb="https://zos.alipayobjects.com/rmsportal/UmbJMbWOejVOpxe.png"
  21. onClick={() => { this.onSel('西吴证券'); }}
  22. >西吴证券</List.Item>
  23. <InputItem value={this.state.val} onChange={(val) => this.setState({ val })}>输入内容</InputItem>
  24. </List>
  25. );
  26. },
  27. });
  28. const Test = React.createClass({
  29. onClick(e) {
  30. e.preventDefault(); // 修复 Android 上点击穿透
  31. Popup.show(<PopupContent onClose={() => Popup.hide()} />, { onMaskClose: this.onMaskClose });
  32. },
  33. onMaskClose() {
  34. console.log('onMaskClose');
  35. // also support Promise
  36. // return new Promise((resolve) => {
  37. // console.log('1000ms 后关闭');
  38. // setTimeout(resolve, 1000);
  39. // });
  40. },
  41. // newInstance() {
  42. // const ins = Popup.newInstance();
  43. // ins.show(<Button onClick={() => ins.hide()}>关闭</Button>);
  44. // },
  45. render() {
  46. return (<div style={{ padding: '0.15rem' }}>
  47. <Button onClick={this.onClick}>显示</Button>
  48. </div>);
  49. },
  50. });
  51. ReactDOM.render(<Test />, mountNode);

向上弹出效果

Popup 向上弹出效果

  1. import { Popup, List, Button, Icon } from 'antd-mobile';
  2. // fix touch to scroll background page on iOS
  3. // https://github.com/ant-design/ant-design-mobile/issues/307
  4. // https://github.com/ant-design/ant-design-mobile/issues/163
  5. const isIPhone = new RegExp('\\biPhone\\b|\\biPod\\b', 'i').test(window.navigator.userAgent);
  6. let wrapProps;
  7. if (isIPhone) {
  8. // Note: the popup content will not scroll.
  9. wrapProps = {
  10. // onTouchStart: e => e.preventDefault(),
  11. };
  12. }
  13. const Test = React.createClass({
  14. getInitialState() {
  15. return {
  16. sel: '',
  17. };
  18. },
  19. onClick() {
  20. Popup.show(<div>
  21. <List renderHeader={() => (
  22. <div style={{ position: 'relative' }}>
  23. 委托买入
  24. <span
  25. style={{
  26. position: 'absolute', right: 3, top: -5,
  27. }}
  28. onClick={() => this.onClose('cancel')}
  29. >
  30. <Icon type="cross" />
  31. </span>
  32. </div>)}
  33. className="popup-list"
  34. >
  35. {['股票名称', '股票代码', '买入价格', '买入数量', '更多', '更多'].map((i, index) => (
  36. <List.Item key={index}>{i}</List.Item>
  37. ))}
  38. </List>
  39. <ul style={{ padding: '0.18rem 0.3rem', listStyle: 'none' }}>
  40. <li>投资说明投资说明...</li>
  41. <li style={{ marginTop: '0.18rem' }}>
  42. <Button type="primary" onClick={() => this.onClose('cancel')}>买入</Button>
  43. </li>
  44. </ul>
  45. </div>, { animationType: 'slide-up', wrapProps, maskClosable: false });
  46. },
  47. onClose(sel) {
  48. this.setState({ sel });
  49. Popup.hide();
  50. },
  51. render() {
  52. return (<div style={{ padding: '0.15rem' }}>
  53. <Button onClick={this.onClick}>显示</Button>
  54. </div>);
  55. },
  56. });
  57. ReactDOM.render(<Test />, mountNode);
  1. .popup-list .am-list-body {
  2. height: 4.2rem;
  3. overflow: auto;
  4. }

Popup弹出层 - 图1

API ( 适用平台:WEB、React-Native )

static show(content: React.Element, options: Object):

options可选项:

  • maskClosable (bool) - 点击蒙层是否允许关闭,默认允许

  • animationType (string) - 可选 slide-down (默认)、slide-up 弹出动画类型

  • transitionName (string) (web only) 自定义显示隐藏变换动画

  • maskTransitionName (string) (web only) 自定义遮罩层变换动画

  • onMaskClose (function) (web only) 遮罩层关闭时的回调,支持返回 Promise

static hide(): 关闭 Popup

static newInstance() (web only)

有些情况下,页面需要多处出现 Popup ,或在 Popup 里再产生 Popup。 返回 Popup 实例对象。对象包括:
  • show (function) - 同 static show

  • hide (function) - 同 static hide