解决antd中Dropdown点击iframe无法关闭的问题

页面中应用了iframe,使用antd中的Dropdown组件点击iframe区域却无法关闭Dropdown

原因:

目前大多数的 UI 组件库,例如 Element、Ant Design、iView 等都是通过鼠标事件来处理, 直接给 Document 绑定了 click 事件,当 click
事件触发时候,判断点击目标是否包含在绑定元素中,如果不是就执行绑定的函数关闭。但 iframe 中加载的是一个相对独立的 Document,如果直接在父页面中给 Document 绑定 click 事件,点击 iframe 并不会触发该事件。

解决方法:监听当前页window失焦事件,主动控制Dropdown组件的打开与关闭。
代码:
1.自定义hooks

import { useEffect, useState } from 'react';

export default isOpen => {
  const [open, setOpen] = useState(isOpen);
  useEffect(() => {
    window.addEventListener('blur', () => {
      setOpen(false);
    });
    return () => {
      window.removeEventListener('blur', () => {
        setOpen(false);
      });
    };
  }, []);
  return [open, setOpen];
};

2.组件使用:

// 导入自定义hooks使用
const [open, setOpen] = useOpen(false);
// 组件使用
<Dropdown
        menu={{
          items: [],
          onClick: () => {
            setOpen(false);
          }
        }}
        trigger={['click']}
        placement="bottomLeft"
        onOpenChange={flag => {
          setOpen(flag);
        }}
        open={open}
      >
        <Button
          icon={<MenuOutlined/>}
          type={'text'}
        ></Button>
</Dropdown>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值