mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-06-25 04:21:17 -03:00
fix(ui): replace full-page loading overlay with grid-scoped loader to eliminate flicker
- Add .grid-loading-overlay CSS: position:absolute inside card grid, semi-transparent dark background, z-index 100, pointer-events:none - Add showGridLoading() / hideGridLoading() to VirtualScroller: creates/removes the scoped overlay inside the card grid only - Modify loadMoreWithVirtualScroll(): replace full-page state.loadingManager overlay with grid-scoped loading, defer hide via requestAnimationFrame to eliminate blank-frame gap - Clean up gridLoadingOverlay in dispose() to prevent DOM leak
This commit is contained in:
@@ -734,6 +734,21 @@ body.hide-card-version .hl-badge {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Grid-scoped loading overlay (replaces full-page overlay for VirtualScroller refreshes) */
|
||||||
|
.grid-loading-overlay {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: var(--lora-bg-transparent, oklch(0% 0 0 / 0.3));
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
z-index: 100;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
/* Add after the existing .model-card:hover styles */
|
/* Add after the existing .model-card:hover styles */
|
||||||
|
|
||||||
@keyframes update-pulse {
|
@keyframes update-pulse {
|
||||||
|
|||||||
@@ -115,7 +115,10 @@ export class BaseModelApiClient {
|
|||||||
const pageState = this.getPageState();
|
const pageState = this.getPageState();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
state.loadingManager.showSimpleLoading(`Loading more ${this.apiConfig.config.displayName}s...`);
|
// Use grid-scoped loading instead of full-page overlay
|
||||||
|
if (state.virtualScroller?.showGridLoading) {
|
||||||
|
state.virtualScroller.showGridLoading();
|
||||||
|
}
|
||||||
|
|
||||||
pageState.isLoading = true;
|
pageState.isLoading = true;
|
||||||
if (resetPage) {
|
if (resetPage) {
|
||||||
@@ -154,7 +157,14 @@ export class BaseModelApiClient {
|
|||||||
throw error;
|
throw error;
|
||||||
} finally {
|
} finally {
|
||||||
pageState.isLoading = false;
|
pageState.isLoading = false;
|
||||||
state.loadingManager.hide();
|
// Wait for the next rAF so refreshWithData's scheduleRender has
|
||||||
|
// completed rendering new cards before hiding the grid loading overlay.
|
||||||
|
// This eliminates the ~6.7ms blank-frame gap that caused the flicker.
|
||||||
|
if (state.virtualScroller?.hideGridLoading) {
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
state.virtualScroller.hideGridLoading();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -657,6 +657,9 @@ export class VirtualScroller {
|
|||||||
this.resizeObserver.disconnect();
|
this.resizeObserver.disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove any active grid loading overlay
|
||||||
|
this.hideGridLoading();
|
||||||
|
|
||||||
// Remove rendered elements
|
// Remove rendered elements
|
||||||
this.clearRenderedItems();
|
this.clearRenderedItems();
|
||||||
|
|
||||||
@@ -1130,4 +1133,30 @@ export class VirtualScroller {
|
|||||||
index: targetIndex
|
index: targetIndex
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show a grid-scoped loading indicator (replaces full-page overlay)
|
||||||
|
* Only covers the card grid area, leaving header/sidebar unaffected.
|
||||||
|
*/
|
||||||
|
showGridLoading() {
|
||||||
|
// Remove any stale overlay from a prior deferred hide (e.g. from final rAF)
|
||||||
|
this.hideGridLoading();
|
||||||
|
const overlay = document.createElement('div');
|
||||||
|
overlay.className = 'grid-loading-overlay';
|
||||||
|
const spinner = document.createElement('div');
|
||||||
|
spinner.className = 'loading-spinner';
|
||||||
|
overlay.appendChild(spinner);
|
||||||
|
this.gridElement.appendChild(overlay);
|
||||||
|
this.gridLoadingOverlay = overlay;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hide the grid-scoped loading indicator.
|
||||||
|
*/
|
||||||
|
hideGridLoading() {
|
||||||
|
if (this.gridLoadingOverlay) {
|
||||||
|
this.gridLoadingOverlay.remove();
|
||||||
|
this.gridLoadingOverlay = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user