Observable.fromEvent (this.handle, 'mousedown'); (только левый клик) - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть следующая функция, которая работает, принимаю, я не хочу вводить switchMap, если событие mouseDown было щелчком правой кнопкой мыши

this.zone.runOutsideAngular(() => {
    let mousedown$ = Observable.fromEvent(this.handle, 'mousedown');
    let mousemove$ = Observable.fromEvent(document, 'mousemove');
    let mouseup$ = Observable.fromEvent(document, 'mouseup');

    let mousedrag$ = mousedown$.switchMap((event: MouseEvent) => {
        console.log('mousedown :', event);
        if (event.which !== 1) {
            //   something when wrong
        }
        let startX = event.clientX;
        let startY = event.clientY;

        return mousemove$
            .map((event: MouseEvent) => {
                event.preventDefault();
                this.delta = {
                    x: event.clientX - startX,
                    y: event.clientY - startY
                };
            })
            .takeUntil(mouseup$);
    }).takeUntil(this.destroy$);

});

как я могу изменить let mousedown$ = Observable.fromEvent(this.handle, 'mousedown');, чтобы только взять event.which === 1

1 Ответ

0 голосов
/ 20 апреля 2020

как предложил @ShamPooSham;

Фильтр до того, как switchMap добился цели.

this.zone.runOutsideAngular(() => {
    let mousedown$ = Observable.fromEvent(this.handle, 'mousedown');
    let mousemove$ = Observable.fromEvent(document, 'mousemove');
    let mouseup$ = Observable.fromEvent(document, 'mouseup');

    let mousedrag$ = mousedown$.filter(event => event['which'] === 1).switchMap((event: MouseEvent) => {
        console.log('mousedown :', event);
        if (event.which !== 1) {
            //   something when wrong
        }
        let startX = event.clientX;
        let startY = event.clientY;

        return mousemove$
            .map((event: MouseEvent) => {
                event.preventDefault();
                this.delta = {
                    x: event.clientX - startX,
                    y: event.clientY - startY
                };
            })
            .takeUntil(mouseup$);
    }).takeUntil(this.destroy$);

});
...