Skip to content

Instantly share code, notes, and snippets.

@qubyte
Created May 27, 2017 13:37
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 qubyte/926266c0cfd795acabeff566dba6ca71 to your computer and use it in GitHub Desktop.
Save qubyte/926266c0cfd795acabeff566dba6ca71 to your computer and use it in GitHub Desktop.
A module which returns an observable for a key. It streams `pressed` and `released` observations. Also has a getter for the pressed state of a key.
import Observable from 'zen-observable';
export default function observeKey(key) {
let pressed = false;
const observable = new Observable(observer => {
function downHandler(e) {
if (e.key === key && !pressed) {
pressed = true;
observer.next('pressed');
}
}
function upHandler(e) {
if (e.key === key && pressed) {
pressed = false;
observer.next('released');
}
}
window.addEventListener('keydown', downHandler, false);
window.addEventListener('keyup', upHandler, false);
return () => {
window.removeEventListener('keydown', downHandler);
window.removeEventListener('keyup', upHandler);
};
});
Object.defineProperty(observable, 'pressed', {
get() {
return pressed;
}
});
return observable;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment