簡體   English   中英

如何從takeUntil中觀察到的止損中獲取價值

[英]How to get value from stop observable in takeUntil

我正在做類似的事情,盡管並不完全像拖放。 我想單擊>跟蹤移動以進行預覽>再次單擊停止跟蹤>從最后一次單擊獲取元數據。 但是,用戶可以單擊多項停止跟蹤,我想知道它是什么,因為副作用取決於所單擊的第二項而有所不同。

基本上,

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

這是從takeUntill中可觀察到的止損中獲取值的特定請求,但是,如果這不可能或不切實際,則采用包含性緩沖區或窗口技術(例如,單擊時保留緩沖區/窗口,但保持單擊數)也可以解決問題。

您可以將所有可觀察到的止動器合並在一起(obsStop $),映射第一個止動器事件以將其與mousemove區別開來,僅發生一個此類事件,並與虛擬'close-takeUntil'事件進行連接。 takeWhile將采取所有鼠標移動並關閉事件,直到虛擬'close-takeUntil'事件到來。

  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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM