mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-20 17:26:01 +08:00
[ts][webcomponents] Stop RAF if tab is hidden.
This commit is contained in:
parent
a27b63fc5e
commit
b90b6996c0
@ -153,6 +153,8 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr
|
||||
|
||||
private disposed = false;
|
||||
private loaded = false;
|
||||
private running = false;
|
||||
private visible = true;
|
||||
|
||||
/**
|
||||
* appendedToBody is assegned in the connectedCallback.
|
||||
@ -284,27 +286,24 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr
|
||||
}
|
||||
this.input = this.setupDragUtility();
|
||||
|
||||
document.addEventListener('visibilitychange', this.visibilityChangeCallback);
|
||||
|
||||
this.startRenderingLoop();
|
||||
}
|
||||
|
||||
private hasCssTweakOff () {
|
||||
return this.noAutoParentTransform && getComputedStyle(this.parentElement!).transform === "none";
|
||||
}
|
||||
|
||||
private running = false;
|
||||
disconnectedCallback (): void {
|
||||
const id = this.getAttribute('overlay-id');
|
||||
if (id) SpineWebComponentOverlay.OVERLAY_LIST.delete(id);
|
||||
// window.removeEventListener("scroll", this.scrolledCallback);
|
||||
window.removeEventListener("load", this.loadedCallback);
|
||||
window.removeEventListener("resize", this.windowResizeCallback);
|
||||
document.removeEventListener('visibilitychange', this.visibilityChangeCallback);
|
||||
window.screen.orientation.removeEventListener('change', this.orientationChangedCallback);
|
||||
this.intersectionObserver?.disconnect();
|
||||
this.resizeObserver?.disconnect();
|
||||
this.input?.dispose();
|
||||
}
|
||||
|
||||
|
||||
static attributesDescription: Record<string, { propertyName: keyof OverlayAttributes, type: AttributeTypes, defaultValue?: any }> = {
|
||||
"overlay-id": { propertyName: "overlayId", type: "string" },
|
||||
"no-auto-parent-transform": { propertyName: "noAutoParentTransform", type: "boolean" },
|
||||
@ -325,6 +324,15 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr
|
||||
return;
|
||||
}
|
||||
|
||||
private visibilityChangeCallback = () => {
|
||||
if (document.hidden) {
|
||||
this.visible = false;
|
||||
} else {
|
||||
this.visible = true;
|
||||
this.startRenderingLoop();
|
||||
}
|
||||
}
|
||||
|
||||
private windowResizeCallback = () => this.resizedCallback(true);
|
||||
|
||||
private resizedCallback = (onlyDiv = false) => {
|
||||
@ -352,6 +360,10 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr
|
||||
}
|
||||
}
|
||||
|
||||
private hasCssTweakOff () {
|
||||
return this.noAutoParentTransform && getComputedStyle(this.parentElement!).transform === "none";
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the overlay from the DOM, dispose all the contained widgets, and dispose the renderer.
|
||||
*/
|
||||
@ -683,7 +695,7 @@ export class SpineWebComponentOverlay extends HTMLElement implements OverlayAttr
|
||||
}
|
||||
|
||||
const loop = () => {
|
||||
if (this.disposed || !this.isConnected) {
|
||||
if (this.disposed || !this.isConnected || !this.visible) {
|
||||
this.running = false;
|
||||
return;
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user