diff options
Diffstat (limited to 'src/App.vue')
| -rw-r--r-- | src/App.vue | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/App.vue b/src/App.vue index a27cc08..0801124 100644 --- a/src/App.vue +++ b/src/App.vue @@ -127,7 +127,8 @@ export default defineComponent({ // For layout and resize-handling mainAreaDims: [0, 0] as [number, number], tileAreaDims: [0, 0] as [number, number], - pendingResizeHdlr: 0, // Set to a setTimeout() value + lastResizeHdlrTime: 0, // Used to throttle resize handling + pendingResizeHdlr: 0, // Set via setTimeout() for a non-initial resize event // Other justInitialised: false, excessTolNodeThreshold: 1000, // Threshold where excess tolMap entries are removed (done on tile collapse) @@ -590,14 +591,28 @@ export default defineComponent({ }, // For other events onResize(){ + // Handle event, delaying/ignoring if this was recently done if (this.pendingResizeHdlr == 0){ - this.pendingResizeHdlr = setTimeout(() => { + const resizeDelay = 100; + let handleResize = () => { this.uiOpts.scrollGap = getScrollBarWidth(); - this.updateAreaDims().then(() => { - this.relayoutWithCollapse(); - this.pendingResizeHdlr = 0; + return this.updateAreaDims().then(() => this.relayoutWithCollapse()); + }; + let currentTime = new Date().getTime(); + if (currentTime - this.lastResizeHdlrTime > resizeDelay){ + this.lastResizeHdlrTime = currentTime; + handleResize().then(() => { + this.lastResizeHdlrTime = new Date().getTime(); }); - }, 100); + } else { + let remainingDelay = resizeDelay - (currentTime - this.lastResizeHdlrTime); + this.pendingResizeHdlr = setTimeout(() => { + this.pendingResizeHdlr = 0; + handleResize().then(() => { + this.lastResizeHdlrTime = new Date().getTime(); + }); + }, remainingDelay); + } } }, onKeyUp(evt: KeyboardEvent){ |
