Skip to content

Instantly share code, notes, and snippets.

@ReedD
Created May 26, 2017 04:23
Show Gist options
  • Save ReedD/a4db8b2692cc88675db353c13b9f9555 to your computer and use it in GitHub Desktop.
Save ReedD/a4db8b2692cc88675db353c13b9f9555 to your computer and use it in GitHub Desktop.
Observable for drag-scroll-end.
import * as Rx from 'rxjs'
const pointerDown$ = Rx.Observable.race(
Rx.Observable.fromEvent(window, 'mousedown'),
Rx.Observable.fromEvent(window, 'touchstart'),
)
const drag$ = pointerDown$.flatMap(() => {
const pointerUp$ = Rx.Observable.race(
Rx.Observable.fromEvent(window, 'mouseup'),
Rx.Observable.fromEvent(window, 'mouseleave'),
Rx.Observable.fromEvent(window, 'touchend'),
Rx.Observable.fromEvent(window, 'touchcancel'),
)
return pointerUp$
.take(1)
.flatMap(() => {
const scroll$ = Rx.Observable.fromEvent(window, 'scroll')
const activity$ = new Rx.BehaviorSubject<number>(1)
return Rx.Observable
.race(
activity$
.debounceTime(100),
scroll$
.do(() => activity$.next(1))
.debounceTime(100)
.take(1),
)
})
})
drag$.subscribe(() => {
console.log('done')
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment