73 lines
1.8 KiB
JavaScript
73 lines
1.8 KiB
JavaScript
import keys from 'ramda/src/keys';
|
|
|
|
export default {
|
|
getMousePosition(event) {
|
|
return {
|
|
x: event.pageX - (window.scrollX || window.pageXOffset),
|
|
y: event.pageY - (window.scrollY || window.pageYOffset),
|
|
};
|
|
},
|
|
|
|
getTouchPosition(event) {
|
|
return {
|
|
x: event.touches[0].pageX - (window.scrollX || window.pageXOffset),
|
|
y: event.touches[0].pageY - (window.scrollY || window.pageYOffset),
|
|
};
|
|
},
|
|
|
|
pauseEvent(event) {
|
|
event.stopPropagation();
|
|
event.preventDefault();
|
|
},
|
|
|
|
addEventsToDocument(eventMap) {
|
|
Object.keys(eventMap).forEach((key) => {
|
|
document.addEventListener(key, eventMap[key], false);
|
|
});
|
|
},
|
|
|
|
removeEventsFromDocument(eventMap) {
|
|
Object.keys(eventMap).forEach((key) => {
|
|
document.removeEventListener(key, eventMap[key], false);
|
|
});
|
|
},
|
|
|
|
targetIsDescendant(event, parent) {
|
|
let node = event.target;
|
|
while (node !== null) {
|
|
if (node === parent) return true;
|
|
node = node.parentNode;
|
|
}
|
|
return false;
|
|
},
|
|
|
|
addEventListenerOnTransitionEnded(element, fn) {
|
|
const eventName = transitionEventNamesFor(element);
|
|
if (!eventName) return false;
|
|
element.addEventListener(eventName, fn);
|
|
return true;
|
|
},
|
|
|
|
removeEventListenerOnTransitionEnded(element, fn) {
|
|
const eventName = transitionEventNamesFor(element);
|
|
if (!eventName) return false;
|
|
element.removeEventListener(eventName, fn);
|
|
return true;
|
|
},
|
|
};
|
|
|
|
const TRANSITIONS = {
|
|
transition: 'transitionend',
|
|
OTransition: 'oTransitionEnd',
|
|
MozTransition: 'transitionend',
|
|
WebkitTransition: 'webkitTransitionEnd',
|
|
};
|
|
|
|
function transitionEventNamesFor(element) {
|
|
return keys(TRANSITIONS).reduce((result, transition) => (
|
|
!result && (element && element.style[transition] !== undefined)
|
|
? TRANSITIONS[transition]
|
|
: result
|
|
), null);
|
|
}
|