<ClickAwayListener onClickAway={handleClickAway}>
<Box sx={{ position: 'relative' }}>
<button type="button" onClick={handleClick}>
Open menu dropdown
</button>
{open ? (
<Box sx={styles}>
Click me, I will stay visible until you click outside.
</Box>
) : null}
</Box>
</ClickAwayListener>
<ClickAwayListener onClickAway={handleClickAway}>
<div>
<button type="button" onClick={handleClick}>
Open menu dropdown
</button>
{open ? (
<Portal>
<Box sx={styles}>
Click me, I will stay visible until you click outside.
</Box>
</Portal>
) : null}
</div>
</ClickAwayListener>
前端(Leading edge)
默认情况下,组件响应了尾随事件(trailing events)(点击 + 触摸结束)。 然而,您可以配置它来回应一些主要的事件(leading events)(鼠标按下 + 触摸开始)。
<ClickAwayListener
mouseEvent="onMouseDown"
touchEvent="onTouchStart"
onClickAway={handleClickAway}
>
<Box sx={{ position: 'relative' }}>
<button type="button" onClick={handleClick}>
Open menu dropdown
</button>
{open ? (
<Box sx={styles}>
Click me, I will stay visible until you click outside.
</Box>
) : null}
</Box>
</ClickAwayListener>
⚠️ 在此模式下,仅有文档对象滚动条上的交互被忽略。
Accessibility
By default <ClickAwayListener />
will add an onClick
handler to its children. This can result in e.g. screen readers announcing the children as clickable. However, the purpose of the onClick
handler is not to make children
interactive. This can result in e.g. screen readers announcing the children as clickable. However, the purpose of the onClick
handler is not to make children
interactive.
In order to prevent screen readers from marking non-interactive children as "clickable" add role="presentation"
to the immediate children:
<ClickAwayListener>
<div role="presentation">
<h1>non-interactive heading</h1>
</div>
</ClickAwayListern>
This is also required to fix a quirk in NVDA when using FireFox that prevents announcement of alert messages (see mui-org/material-ui#29080).