Для своего веб-приложения я работаю над всплывающим элементом, который используется для меню и подобных вещей. Я хочу перенаправить весь ввод с помощью мыши на текущей странице на этот всплывающий элемент, когда он виден, однако я могу заставить его работать.
У меня есть элемент плитки, который при наведении курсора мыши показывает изображение (и выделяет плитка). Когда пользователь нажимает на это изображение, отображается всплывающее окно (в виде контекстного меню). Это уже работает. Когда пользователь перемещает мышь за пределы плитки, состояние наведения исчезает, выделение, а также изображение исчезают, чего не должно происходить. Вместо этого я хочу, чтобы визуальное состояние не изменялось, пока отображается меню.
Поэтому я попытался захватить мышь, используя Element.setPointerCapture . Однако для этого требуется идентификатор указателя, которого у меня нет. Я попытался использовать onPointerDown
в изображении триггера, но это ничего не дало.
Как правильно реализовать этот захват мыши, чтобы никакое событие мыши не планировалось для любого другого элемента HTML , но всплывающее окно?
Вот что я придумал до сих пор:
private handleTriggerClick = (e: React.MouseEvent): void => {
console.log("mouse");
this.props.trigger?.props.onClick?.(e);
if (this.state.open && this.props.closeOnTriggerClick) {
this.close();
} else if (!this.state.open && this.props.openOnTriggerClick) {
this.open();
e.currentTarget.setPointerCapture(this.pointerId);
}
e.stopPropagation();
};
private handleTriggerPointerDown = (e: React.PointerEvent): void => {
console.log("pointer");
this.pointerId = e.pointerId;
};
где trigger
- изображение, используемое для отображения всплывающего окна.
I также пытался использовать обработчик перемещения мыши в документе, но это тоже не сработало, вероятно, из-за всплытия событий, когда сначала более глубокие элементы получают событие до того, как оно достигнет документа, поэтому уже слишком поздно, чтобы предотвратить обработку по умолчанию или остановить распространение .