如何通过单击菜单外部关闭“ react-burger-menu”?

时间:2019-09-09 09:09:49

标签: javascript reactjs

如何通过单击菜单外部关闭react-burger-menu

我使用:https://github.com/negomi/react-burger-menu

import { slide as Menu } from 'react-burger-menu'

class Example extends React.Component {
  showSettings (event) {
    event.preventDefault();
    .
    .
    .
  }

  render () {
    return (
      <Menu>
        <a id="home" className="menu-item" href="/">Home</a>
        <a id="about" className="menu-item" href="/about">About</a>
        <a id="contact" className="menu-item" href="/contact">Contact</a>
        <a onClick={ this.showSettings } className="menu-item--small" href="">Settings</a>
      </Menu>
    );
  }
}

3 个答案:

答案 0 :(得分:1)

好的。因此,如果您遇到同样的问题,那么在使用onClick来更改菜单状态时却遇到了问题,但是重新加载了页面却又失去了很好的过渡效果,请执行此操作。

除了更改菜单状态外,只需单击叠加层就好像您要关闭菜单一样,方法是单击上一页:

let element: HTMLElement = document.getElementsByClassName("bm-overlay")[0] as HTMLElement;
    element.click();

在您更新反应汉堡菜单并且突然之间'bm-overlay'不再存在的情况下,此解决方案可能无法证明是将来,但这似乎不太可能,并且每次都可以使用。这样,您可以让菜单本身独自处理“ isOpen”的状态。

答案 1 :(得分:0)

我没有提供完整的解决方案。但是似乎来自react-burger-menu的菜单组件具有名为isOpen的道具。您实际上可以根据用例进行修改和使用。 https://github.com/negomi/react-burger-menu/wiki/FAQ#i-want-to-control-the-open-state-programmatically-but-i-dont-understand-how-to-use-the-isopen-prop

答案 2 :(得分:0)

您将从 react-burger-menu 上获得 .bm-overly 课。

注意:点击该叠加层会自动关闭汉堡菜单 但您需要按如下所示将覆盖图扩展到整个屏幕上

如果您正在使用左侧对齐的菜单:

.bm-overlay {
  background: rgba(255, 255, 255, 0.3);
  top: 0px;
  right: 0px;
}

如果您使用的是右侧菜单对齐方式:

.bm-overlay {
  background: rgba(255, 255, 255, 0.3);
  top: 0px;
  left: 0px;
}