2017-05-04 16 views
0

ドラッグアンドドロップと全く同じではありませんが、同様のことをやっています。クリックしてプレビューの動きを追跡し、再度クリックしてトラッキングを停止する>最後のクリックからメタデータを取得します。しかし、ユーザーは複数のものをクリックしてトラッキングを止めることができ、クリックされた2番目のアイテムによって副作用が異なるため、それが何であるかを知りたい。takeUntilで観測可能な値を取得する方法

基本的には、その

clickSomething$ = merge(anythingTheyCanClick); 
click$.switchMap(click => moveData.takeUntil(clickSomething$)) //need to get value from clickSomething$ 

これはtakeUntillで観察停止状態から値を取得するための具体的な要求であるが、それは可能か非現実的ではない場合、包括バッファまたはウィンドウ技術(上の例のバッファ/ウィンドウクリックは維持しますが)、問題を解決することもできます。

答えて

0

すべてのストッパー観測値を結合して(obsStop $)、最初の停止イベントをマップしてmousemoveと区別し、そのようなイベントを1つだけ取り出し、ダミーの 'close-takeUntil'イベントと連結することができます。 takeWhileは、ダミーのclose-takeUntilイベントが来るまで、すべてのマウスの動きとcloseイベントを受け取ります。

let start = document.getElementById('start'); 
    let stop1 = document.getElementById('stop1'); 
    let stop2 = document.getElementById('stop2'); 
    let stop3 = document.getElementById('stop3'); 

    let start$ = Rx.Observable.fromEvent(start, 'click'); 
    let stop1$ = Rx.Observable.fromEvent(stop1, 'click'); 
    let stop2$ = Rx.Observable.fromEvent(stop2, 'click'); 
    let stop3$ = Rx.Observable.fromEvent(stop3, 'click'); 

    let obsStop$ = Rx.Observable.merge(stop1$, stop2$, stop3$); 

    start$.switchMap(x => { 
    return Rx.Observable.fromEvent(document, 'mousemove') 
     .merge(obsStop$ 
     .map(event => { 
      return {stopClick: true, event: event}; 
     }) 
     .take(1) 
     .concat(Rx.Observable.of('takeUntil'))) 
     .takeWhile(x => x !== 'takeUntil') 

    }).subscribe(x => console.log(x)); 
関連する問題