54 lines
1.4 KiB
JavaScript
54 lines
1.4 KiB
JavaScript
function createLock(name) {
|
|
let lock = null;
|
|
return () => {
|
|
const openLock = () => {
|
|
lock = null;
|
|
};
|
|
if (lock === null) {
|
|
lock = name;
|
|
return openLock;
|
|
}
|
|
return false;
|
|
};
|
|
}
|
|
const globalHorizontalLock = createLock("dragHorizontal");
|
|
const globalVerticalLock = createLock("dragVertical");
|
|
function getGlobalLock(drag) {
|
|
let lock = false;
|
|
if (drag === "y") {
|
|
lock = globalVerticalLock();
|
|
}
|
|
else if (drag === "x") {
|
|
lock = globalHorizontalLock();
|
|
}
|
|
else {
|
|
const openHorizontal = globalHorizontalLock();
|
|
const openVertical = globalVerticalLock();
|
|
if (openHorizontal && openVertical) {
|
|
lock = () => {
|
|
openHorizontal();
|
|
openVertical();
|
|
};
|
|
}
|
|
else {
|
|
// Release the locks because we don't use them
|
|
if (openHorizontal)
|
|
openHorizontal();
|
|
if (openVertical)
|
|
openVertical();
|
|
}
|
|
}
|
|
return lock;
|
|
}
|
|
function isDragActive() {
|
|
// Check the gesture lock - if we get it, it means no drag gesture is active
|
|
// and we can safely fire the tap gesture.
|
|
const openGestureLock = getGlobalLock(true);
|
|
if (!openGestureLock)
|
|
return true;
|
|
openGestureLock();
|
|
return false;
|
|
}
|
|
|
|
export { createLock, getGlobalLock, isDragActive };
|