2016-12-16 13 views
1

2つのシンプルなイベント処理があります。mousedownで設定した監視対象です。RxJS skipUntilオペレータが期待通りに動作しない

マウスアップは、要素がmousemoveで移動されたかどうかによって、アプリケーション内でいくつかのアクションをトリガします。そのため、単純なクリックでそれを防ぐ必要があります。

私の印象は、500個のマウスがスキップされ、放出された後にのみマウスアップを開始する必要がありますが、 'mouseup'は単一の 'mousemove'がログに記録されていなくても記録されます(skipもっとばかげた数字に設定する)。

私には何が欠けていますか?

var mouseupObservable = Observable.fromEvent(this.element, 'mouseup'); 
var mouseMoveObservable = Observable.fromEvent(window, 'mousemove'); 
mouseupObservable 
    .skipUntil(mouseMoveObservable) 
    .subscribe(()=>console.error('mouseup')); 
mouseMoveObservable 
    .takeUntil(mouseupObservable) 
    .skip(500) 
    .subscribe(()=>console.error('mousemove')); 
+0

ここで問題の実際の例を教えてください。 http://jsbin.com/qesufuxica/edit?js,console,outputは期待どおりに動作するようです。 – Whymarrh

答えて

1

事は、このしようと、あなたはスキップの内側に「生」のストリームを使用することである:

var mouseupObservable = Observable.fromEvent(this.element, 'mouseup'); 
var mouseMoveObservable = Observable.fromEvent(window, 'mousemove'); 

let mouseUp$ = mouseupObservable 
    .skipUntil(mouseMoveObservable.skip(500)); 

mouseUp$.subscribe(()=>console.error('mouseup')); 

let mouseMove$ = mouseMoveObservable 
    .takeUntil(mouseUp$); 

mouseMove$.subscribe.... 

をしかし、「takeUntil(...)は、」あなたが完了しますのでご注意くださいストリームが満たされている....これは、これが単一の「移動クリックサイクル」でのみ機能することを意味します。これがあなたの意図であるかどうかはわかりません。

+0

それだけです!ありがとう、私は彼らがとにかく放射していると思った、ちょうどこれがそれについて行く方法だったことを知らなかった... 私は完了を知っている、それは世話をして本当に意図的ですが、すぐに変更されます。どうもありがとう。 – wlad

関連する問題