feat: make custom context menu imitate browser context menu behavior
This commit is contained in:
parent
99ed210d26
commit
839920f124
2 changed files with 23 additions and 10 deletions
13
app.vue
13
app.vue
|
@ -17,12 +17,21 @@ const contextMenu = useState<ContextMenuInterface>("contextMenu", () => ({ show:
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
loadPreferredThemes()
|
loadPreferredThemes()
|
||||||
|
|
||||||
document.addEventListener("pointerdown", (e) => {
|
document.addEventListener("contextmenu", (e) => {
|
||||||
|
if (contextMenu.value.show) {
|
||||||
|
e.preventDefault();
|
||||||
|
if (e.target instanceof Element && !e.target.classList.contains("context-menu-item")) {
|
||||||
|
removeContextMenu(contextMenu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener("mousedown", (e) => {
|
||||||
if (e.target instanceof HTMLElement && e.target.classList.contains("context-menu-item")) return;
|
if (e.target instanceof HTMLElement && e.target.classList.contains("context-menu-item")) return;
|
||||||
console.log("click");
|
console.log("click");
|
||||||
console.log("target:", e.target);
|
console.log("target:", e.target);
|
||||||
console.log(e.target instanceof HTMLDivElement);
|
console.log(e.target instanceof HTMLDivElement);
|
||||||
if (contextMenu.value.show) {
|
if (e.button != 2 && contextMenu.value.show) {
|
||||||
console.log("context menu is shown, hiding");
|
console.log("context menu is shown, hiding");
|
||||||
removeContextMenu(contextMenu);
|
removeContextMenu(contextMenu);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,13 +6,17 @@ export default (e: MouseEvent | PointerEvent, sections: ContextMenuSection[]) =>
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
const contextMenu = useState<ContextMenuInterface>("contextMenu");
|
const contextMenu = useState<ContextMenuInterface>("contextMenu");
|
||||||
console.log("Menu sections:", sections);
|
if (contextMenu.value.show) {
|
||||||
if (sections.length) {
|
removeContextMenu(contextMenu);
|
||||||
console.log("Showing context menu");
|
} else {
|
||||||
contextMenu.value.show = true;
|
console.log("Menu sections:", sections);
|
||||||
contextMenu.value.pointerX = e.clientX;
|
if (sections.length) {
|
||||||
contextMenu.value.pointerY = e.clientY;
|
console.log("Showing context menu");
|
||||||
contextMenu.value.sections = sections;
|
contextMenu.value.show = true;
|
||||||
console.log("Showed");
|
contextMenu.value.pointerX = e.clientX;
|
||||||
|
contextMenu.value.pointerY = e.clientY;
|
||||||
|
contextMenu.value.sections = sections;
|
||||||
|
console.log("Showed");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue