Перейти к контенту

🎉 Material UI v5 is out now! Check out the announcement blog post

Событие клика вне компонента

Отлавливает щелчок за пределами компонента Слушает только щелчки внутри браузерного документа

Пример

Например, если вам нужно скрыть выпадающее меню щелчком по странице за его пределами:

<ClickAwayListener onClickAway={handleClickAway}>
  <div className={classes.root}>
    <button type="button" onClick={handleClick}>
      Open menu dropdown
    </button>
    {open ? (
      <div className={classes.dropdown}>
        Click me, I will stay visible until you click outside.
      </div>
    ) : null}
  </div>
</ClickAwayListener>

Обратите внимание, что компонент принимает только один дочерний элемент. Более подробный пример вы можете найти в разделе документации меню.

Portal

Следующее демо использует Портал для рендеринга раскрывающегося меню в новое поддерево вне текущей иерархии DOM.

<ClickAwayListener onClickAway={handleClickAway}>
  <div>
    <button type="button" onClick={handleClick}>
      Open menu dropdown
    </button>
    {open ? (
      <Portal>
        <div className={classes.dropdown}>
          Click me, I will stay visible until you click outside.
        </div>
      </Portal>
    ) : null}
  </div>
</ClickAwayListener>

Ведущие события

По умолчанию компонент отвечает на конечные события (клик (click) + окончание касания (touchend)). Однако, вы можете настроить его таким образом, чтобы он отвечал и на ведущие событие (нажатие кнопки мыши (mousedown) + начало касания (touch start)).

<ClickAwayListener
  mouseEvent="onMouseDown"
  touchEvent="onTouchStart"
  onClickAway={handleClickAway}
>
  <div className={classes.root}>
    <button type="button" onClick={handleClick}>
      Open menu dropdown
    </button>
    {open ? (
      <div className={classes.dropdown}>
        Click me, I will stay visible until you click outside.
      </div>
    ) : null}
  </div>
</ClickAwayListener>

⚠️ В этом режиме только взаимодействие на полосе прокрутки документа игнорируется.