gpt4 book ai didi

reactjs - 如何基于悬停而不是单击制作 Material-UI 菜单

转载 作者:行者123 更新时间:2023-12-04 14:30:25 25 4
gpt4 key购买 nike

我正在使用 Material-UI 菜单。
它应该可以正常工作,但只需使用鼠标悬停,而不是单击。
这是我的代码链接:https://codesandbox.io/embed/vn3p5j40m0

下面是我尝试过的代码。它可以正确打开,但在鼠标移开时不会关闭。

import React from "react";
import Button from "@material-ui/core/Button";
import Menu from "@material-ui/core/Menu";
import MenuItem from "@material-ui/core/MenuItem";

function SimpleMenu() {
const [anchorEl, setAnchorEl] = React.useState(null);

function handleClick(event) {
setAnchorEl(event.currentTarget);
}

function handleClose() {
setAnchorEl(null);
}

return (
<div>
<Button
aria-owns={anchorEl ? "simple-menu" : undefined}
aria-haspopup="true"
onClick={handleClick}
onMouseEnter={handleClick}
>
Open Menu
</Button>
<Menu
id="simple-menu"
anchorEl={anchorEl}
open={Boolean(anchorEl)}
onClose={handleClose}
onMouseLeave={handleClose}
>
<MenuItem onClick={handleClose}>Profile</MenuItem>
<MenuItem onClick={handleClose}>My account</MenuItem>
<MenuItem onClick={handleClose}>Logout</MenuItem>
</Menu>
</div>
);
}

export default SimpleMenu;

最佳答案

下面的代码似乎可以合理地工作。与您的沙箱相比,主要变化是使用 onMouseOver={handleClick}而不是 onMouseEnter在按钮上。如果没有此更改,如果鼠标不在菜单部分所在的位置上,它就不会可靠地打开。另一个变化是使用 MenuListProps={{ onMouseLeave: handleClose }} .使用 onMouseLeave直接上 Menu不起作用,因为菜单包含一个覆盖,作为菜单的一部分,利用 Modal并且鼠标永远不会“离开”覆盖层。 MenuList是 Menu 中显示菜单项的部分。

import React from "react";
import Button from "@material-ui/core/Button";
import Menu from "@material-ui/core/Menu";
import MenuItem from "@material-ui/core/MenuItem";

function SimpleMenu() {
const [anchorEl, setAnchorEl] = React.useState(null);

function handleClick(event) {
if (anchorEl !== event.currentTarget) {
setAnchorEl(event.currentTarget);
}
}

function handleClose() {
setAnchorEl(null);
}

return (
<div>
<Button
aria-owns={anchorEl ? "simple-menu" : undefined}
aria-haspopup="true"
onClick={handleClick}
onMouseOver={handleClick}
>
Open Menu
</Button>
<Menu
id="simple-menu"
anchorEl={anchorEl}
open={Boolean(anchorEl)}
onClose={handleClose}
MenuListProps={{ onMouseLeave: handleClose }}
>
<MenuItem onClick={handleClose}>Profile</MenuItem>
<MenuItem onClick={handleClose}>My account</MenuItem>
<MenuItem onClick={handleClose}>Logout</MenuItem>
</Menu>
</div>
);
}

export default SimpleMenu;

Edit Material demo

关于reactjs - 如何基于悬停而不是单击制作 Material-UI 菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55318477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com