Material-ui:按事件悬停打开菜单

Cai*_*sta 5 menu-items reactjs material-ui

当前,menuItem仅在单击后打开您的孩子。是否有我同意通过悬停打开的属性?

<MenuItem key={index}
  menuItems={menuitems}
  **onHover={true}**
>
 menuItem
</MenuItem>
Run Code Online (Sandbox Code Playgroud)

Jul*_*ont 9

material-ui库没有可用的特定属性。但是,您可以使用该onMouseOver事件轻松地自己创建此事件。

我从material-ui站点改编了“ 简单菜单”示例,以向您展示如何完成此操作:

import React from 'react';
import Button from 'material-ui/Button';
import Menu, { MenuItem } from 'material-ui/Menu';

class SimpleMenu extends React.Component {
  state = {
    anchorEl: null,
    open: false,
  };

  handleClick = event => {
    this.setState({ open: true, anchorEl: event.currentTarget });
  };

  handleRequestClose = () => {
    this.setState({ open: false });
  };

  render() {
    return (
      <div>
        <Button
          aria-owns={this.state.open ? 'simple-menu' : null}
          aria-haspopup="true"
          onClick={this.handleClick}

          { // The following line makes the menu open whenever the mouse passes over the menu }
          onMouseOver={this.handleClick}
        >
          Open Menu
        </Button>
        <Menu
          id="simple-menu"
          anchorEl={this.state.anchorEl}
          open={this.state.open}
          onRequestClose={this.handleRequestClose}
        >
          <MenuItem onClick={this.handleRequestClose}>Profile</MenuItem>
          <MenuItem onClick={this.handleRequestClose}>My account</MenuItem>
          <MenuItem onClick={this.handleRequestClose}>Logout</MenuItem>
        </Menu>
      </div>
    );
  }
}

export default SimpleMenu;
Run Code Online (Sandbox Code Playgroud)

  • 我的问题是,如果鼠标离开该区域,我希望菜单消失,所以我尝试 onMouseOut 和 onMouseLeave 来关闭菜单,但似乎当此选项存在时,菜单永远不会打开!但是,当我删除 onMouseOver 或 Leave 时,它​​工作正常,但如果您不单击某些内容,它就会停留在那里。 (7认同)
  • @StazChristo 遇到了同样的问题,找到了一个解决方案 `MenuListProps={{ onMouseLeave: handleClose }}` [此处](/sf/ask/3872293421/基于悬停而非点击) (3认同)
  • @StazChristo 发生这种情况是因为当您打开菜单时,模式布局会放置在整个页面上,这意味着 onMouseLeave 事件将在 onMouseEnter 之后立即触发。devonj 的解决方案很好,但要使其工作,您必须更改菜单锚点,使其完全覆盖按钮。 (2认同)