Я борюсь с этим и понятия не имею, как поступить.Я хочу захватить событие мыши, только когда пользователь останавливается на mousemove
в течение определенного времени, и оно находится внутри определенного элемента.
const { fromEvent } = rxjs;
const { debounceTime, tap, filter } = rxjs.operators;
const square = document.querySelectorAll("#square");
let isCursorOverSquare = true;
const move$ = fromEvent(square, "mousemove");
const enter$ = fromEvent(square, "mouseenter");
const leave$ = fromEvent(square, "mouseleave");
enter$.pipe(
tap(() => isCursorOverSquare = true)
).subscribe();
leave$.pipe(
tap(() => isCursorOverSquare = false)
).subscribe();
move$
.pipe(
debounceTime(2000),
filter(() => isCursorOverSquare)
)
.subscribe(
(e) => {
console.log(e.target);
});
#square {
width: 200px;
height: 200px;
display: block;
border: 1px solid black;
}
<script src="https://unpkg.com/rxjs@6.3.2/bundles/rxjs.umd.min.js"></script>
<div id="square"></div>
Я не могу понять, как пропустить console.log
, если пользователь перемещается из квадрата наружу (т.е. обрабатываеттолько логика, когда пользователь находится с курсором внутри квадрата).
РЕДАКТИРОВАТЬ: Мне удалось это сделать, но это не "RxJs" способ.Теперь я устанавливаю переменную isCursorOverSquare
на true
и false
, а затем использую оператор filter
.Есть ли более приятный, более реактивный способ справиться с этим?