Ich glaube, du bist für skipUntil
http://jsbin.com/tawide/edit?js,console,output
const mouseDowns = Rx.Observable.fromEvent(document.body, "mousedown");
const mouseUps = Rx.Observable.fromEvent(document.body, "mouseup");
mouseUps
.skipUntil(mouseDowns)
.subscribe(x => console.log("CAPTURED"))
suchen (Für mein eigenes Wissen, wenn eine Maus nach oben nicht durch eine Maus ging nach unten?)
EDIT
Das obige ist eine Antwort auf Ihren Code. Wenn Sie nur ein einzelnes Ereignis nach einem Down-up-Ereignis wollen, brauchen Sie einen etwas hässlichen Scan.
// dn: ---d-------d-d----d-|
// up: u----u--u-------u---|
// : -----e----------e---|
const mouseUp = document.querySelector('.mouseUp');
const mouseDown = document.querySelector('.mouseDown');
const mouseUp$ = Rx.Observable.fromEvent(mouseUp, 'click')
.map(() => false);
const mouseDown$ = Rx.Observable.fromEvent(mouseDown, 'click')
.map(() => true);
Rx.Observable.merge(mouseUp$, mouseDown$)
.scan((acc, cur) => {
if (!cur && acc.downEvent) return ({ event: true, downEvent: false})
if (cur) return ({ event: false, downEvent: true})
return ({ event: false, downEvent: acc.downEvent})
}, {event: false, downEvent: false})
.filter(x => x.event === true)
.subscribe(
x => console.log('event!'),
(e) => console.log("error",e),
() => console.log('complete')
);
Das ist gute Arbeit! –