diff --git a/app/src/menus/Menu.ts b/app/src/menus/Menu.ts index a176cea25..424dfdc1f 100644 --- a/app/src/menus/Menu.ts +++ b/app/src/menus/Menu.ts @@ -5,8 +5,11 @@ import {isMobile} from "../util/functions"; export class Menu { public element: HTMLElement; + private wheelEvent: string; constructor() { + this.wheelEvent = "onwheel" in document.createElement("div") ? "wheel" : "mousewheel"; + this.element = document.getElementById("commonMenu"); this.element.addEventListener(isMobile() ? getEventName() : "mouseover", (event) => { const target = event.target as Element; @@ -53,7 +56,17 @@ export class Menu { }); } + private preventDefault(event: KeyboardEvent) { + event.preventDefault(); + } + public remove() { + if (isMobile()) { + window.removeEventListener("touchmove", this.preventDefault, false); + } else { + window.removeEventListener(this.wheelEvent, this.preventDefault, false); + } + this.element.innerHTML = ""; this.element.classList.add("fn__none"); this.element.style.zIndex = ""; @@ -67,6 +80,12 @@ export class Menu { } public popup(options: { x: number, y: number, h?: number }, isLeft = false) { + if (isMobile()) { + window.addEventListener("touchmove", this.preventDefault, {passive: false}); + } else { + window.addEventListener(this.wheelEvent, this.preventDefault, {passive: false}); + } + this.element.classList.remove("fn__none"); setPosition(this.element, options.x - (isLeft ? window.siyuan.menus.menu.element.clientWidth : 0), options.y, options.h); }