Files
swingmusic-extended/src/composables/normalizeContextMenu.js
T
2022-05-26 19:12:04 +03:00

45 lines
1.3 KiB
JavaScript

import { getElem } from "./perks";
export default (mouseX, mouseY) => {
const scope = getElem("app", "id");
const contextMenu = getElem("context-menu", "class");
// ? compute what is the mouse position relative to the container element
// (scope)
let { left: scopeOffsetX, top: scopeOffsetY } = scope.getBoundingClientRect();
scopeOffsetX = scopeOffsetX < 0 ? 0 : scopeOffsetX;
scopeOffsetY = scopeOffsetY < 0 ? 0 : scopeOffsetY;
const scopeX = mouseX - scopeOffsetX;
const scopeY = mouseY - scopeOffsetY;
// ? check if the element will go out of bounds
const outOfBoundsOnX = scopeX + contextMenu.clientWidth > scope.clientWidth;
const outOfBoundsOnY = scopeY + contextMenu.clientHeight > scope.clientHeight;
let normalX = mouseX;
let normalY = mouseY;
let normalizedX = false;
let normalizedY = false;
if (window.innerWidth - normalX < 375) {
normalizedX = true;
}
// ? normalize on X
if (outOfBoundsOnX) {
normalX = scopeOffsetX + scope.clientWidth - contextMenu.clientWidth;
normalX -= 10;
}
// ? normalize on Y
if (outOfBoundsOnY) {
normalY = scopeOffsetY + scope.clientHeight - contextMenu.clientHeight;
normalY -= 10;
normalizedY = true;
}
return { normalX, normalY, normalizedX, normalizedY };
};