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

🎉 Material UI v5 is out! Head to the migration guide to get started.

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

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

Пример

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

<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>

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