perf(layout): track panel resizing at a stepped cadence
This commit is contained in:
1 parent
a78fc48a7b
commit
8eba12ea2f
17 files changed
+705
-34
No files matched your search
@@ -1,4 +1,5 @@
|
||||
import { onBeforeUnmount, ref, watch, type Ref } from "vue";
|
||||
import { deferUntilPanelResizeEnd } from "@/lib/app/panelResizeState";
|
||||
|
||||
export function useTabScroll(tabsContainerRef: Ref<HTMLElement | null>) {
|
||||
const hasTabOverflow = ref(false);
|
||||
@@ -20,6 +21,10 @@ export function useTabScroll(tabsContainerRef: Ref<HTMLElement | null>) {
|
||||
scrollThumbWidthPercent.value = 100;
|
||||
return;
|
||||
}
|
||||
// Skip DOM geometry reads while a divider drag is in flight; they force a
|
||||
// synchronous relayout of the whole document on every frame. Re-measure
|
||||
// once when the drag finishes.
|
||||
if (deferUntilPanelResizeEnd(updateScrollButtons)) return;
|
||||
const maxScrollLeft = Math.max(0, el.scrollWidth - el.clientWidth);
|
||||
hasTabOverflow.value = maxScrollLeft > 1;
|
||||
const rawThumbWidth = el.scrollWidth > 0 ? (el.clientWidth / el.scrollWidth) * 100 : 100;
|
||||
|
||||
Reference in new issue
Block a user