Skip to content

Instantly share code, notes, and snippets.

@appsforartists
Created September 20, 2016 01:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save appsforartists/0e0fa592677003319bcbbf78277fed79 to your computer and use it in GitHub Desktop.
Save appsforartists/0e0fa592677003319bcbbf78277fed79 to your computer and use it in GitHub Desktop.
function pointersStream = function(target) {
return Rx.Observable.from(
[
'pointerdown',
'pointermove',
'pointerup',
].map(
type => Rx.Observable.fromEvent(target, type)
)
).mergeAll().filter(
event => event.pressure || event.type === 'pointerup'
).groupBy(
event => event.pointerId
).map(
pointerEventStream => pointerEventStream.map(
event => (
{
id: event.pointerId,
x: event.pageX,
y: event.pageY,
pressure: event.pressure,
}
)
).takeUntil(pointer => !pointer.pressure)
).zipLatest(
currentPointers => // [pointer1, pointer2]
);
}
// expected result
function zipLatest(predicate) {
return Rx.Observable.create(
observer => {
const source = this;
const latestMap = new Map();
function dispatch() {
observer.next(
latestMap.values()
);
}
source.subscribe(
{
next(innerStream) {
innerStream.subscribe(
{
next(value) {
latestMap.set(innerStream, value);
dispatch();
},
complete() {
latestMap.delete(innerStream);
dispatch();
}
}
)
}
}
);
}
);
}
@appsforartists
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment