2017-05-04 7 views
0

드래그 앤 드롭과 유사하지는 않지만 비슷한 작업을하고 있습니다. 클릭> 미리보기를 위해 운동 추적> 다시 클릭시 추적 중지> 마지막 클릭으로부터 메타 데이터 얻기 그러나 사용자는 여러 가지를 클릭하여 추적을 중지 할 수 있으며 클릭 한 두 번째 항목에 따라 부작용이 다르기 때문에 그 내용을 알고 싶습니다. 기본적으로 takeUntil에서 관측 가능한 값을 얻는 방법

, 그

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

이 takeUntill에서 관찰 정지에서 값을 취득하기위한 특정 요청이지만, 그 포괄적 인 버퍼 또는 창 기술, 불가능하거나 실용적이지 않다 경우 (예 : 버퍼/창 클릭 수는 있지만 클릭 수는 계속 유지) 문제를 해결할 수도 있습니다.

답변

0

관찰 할 수있는 모든 마개를 병합하고 (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)); 
관련 문제