From f35a33b5c49c4dc768c1be8ddf3393f79acaa57f Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Sat, 7 Nov 2020 20:19:22 -0800 Subject: Disable context menu shortly after scrolling --- app/src/web/ts/context_a.ts | 8 ++++++++ app/src/web/ts/scroll_stop.ts | 25 +++++++++++++++++++++++++ app/src/web/typings/frost.d.ts | 4 ++++ 3 files changed, 37 insertions(+) create mode 100644 app/src/web/ts/scroll_stop.ts (limited to 'app/src/web') diff --git a/app/src/web/ts/context_a.ts b/app/src/web/ts/context_a.ts index 9faa1e94..ad81279e 100644 --- a/app/src/web/ts/context_a.ts +++ b/app/src/web/ts/context_a.ts @@ -110,6 +110,14 @@ Frost.longClick(true); longClick = true; + /** + * Don't handle context events while scrolling + */ + if (Frost.isScrolling()) { + console.log("Skip from scrolling"); + return; + } + /* * Commonality; check for valid target */ diff --git a/app/src/web/ts/scroll_stop.ts b/app/src/web/ts/scroll_stop.ts new file mode 100644 index 00000000..1ec6d30b --- /dev/null +++ b/app/src/web/ts/scroll_stop.ts @@ -0,0 +1,25 @@ +// Listen when scrolling events stop +(function () { + let scrollTimeout: number | undefined = undefined; + let scrolling: boolean = false; + + window.addEventListener('scroll', function (event) { + + if (!scrolling) { + Frost.setScrolling(true); + scrolling = true; + } + + window.clearTimeout(scrollTimeout); + + scrollTimeout = setTimeout(function () { + if (scrolling) { + Frost.setScrolling(false); + scrolling = false; + } + }, 600); + // For our specific use case, we want to release other features pretty far after scrolling stops + // For general scrolling use cases, the delta can be much smaller + // My assumption for context menus is that the long press is 500ms + }, false); +}).call(undefined); \ No newline at end of file diff --git a/app/src/web/typings/frost.d.ts b/app/src/web/typings/frost.d.ts index ae7c97ab..9f77ce9e 100644 --- a/app/src/web/typings/frost.d.ts +++ b/app/src/web/typings/frost.d.ts @@ -24,6 +24,10 @@ declare interface FrostJSI { handleHeader(html: string | null) allowHorizontalScrolling(enable: boolean) + + setScrolling(scrolling: boolean) + + isScrolling(): boolean } declare var Frost: FrostJSI; -- cgit v1.2.3