Guest User

Untitled

a guest
Nov 18th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. const { fromEvent } = rxjs;
  2. const { switchMap, takeUntil } = rxjs.operators;
  3.  
  4. const view = document.getElementById('carousel');
  5.  
  6. const start$ = fromEvent(view, 'mousedown');
  7. const move$ = fromEvent(view, 'mousemove');
  8. const end$ = fromEvent(view, 'mouseup');
  9.  
  10. const drag$ = start$.pipe(
  11. // Observable을 평탄하게 합치기 위해 mergeMap을 사용할 수 있으나
  12. // start$에서 데이터가 발생할 때마다 move$가 생성되므로 기존 데이터를 자동으로 종료하기 위해 switchMap을 사용한다.
  13. switchMap(start => move$.pipe(
  14. // takeUntil에 전달된 end$ Observable에서 데이터가 발생하는 순간 대상의 상태를 종료 처리하고 자동으로 구독을 해제한다.
  15. takeUntil(end$),
  16. )),
  17. );
  18.  
  19. drag$.subscribe(e => console.log(e));
  20.  
  21. // MouseEvent {isTrusted: true, screenX: 1074, screenY: 551, clientX: 163, clientY: 106, …}
  22. // MouseEvent {isTrusted: true, screenX: 1101, screenY: 548, clientX: 190, clientY: 104, …}
  23. // MouseEvent {isTrusted: true, screenX: 1130, screenY: 548, clientX: 219, clientY: 104, …}
  24. // MouseEvent {isTrusted: true, screenX: 1163, screenY: 548, clientX: 252, clientY: 104, …}
Add Comment
Please, Sign In to add comment