Skip to content

Commit 816dade

Browse files
committed
Enhance map loading: implement IntersectionObserver to load data on visibility
1 parent 040766d commit 816dade

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

src/client/components/map/MapDisplay.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,32 @@ export class MapDisplay extends LitElement {
1515
@state() private mapName: string | null = null;
1616
@state() private isLoading = true;
1717
@state() private hasNations = true;
18+
private observer: IntersectionObserver | null = null;
19+
private dataLoaded = false;
1820

1921
createRenderRoot() {
2022
return this;
2123
}
2224

2325
connectedCallback() {
2426
super.connectedCallback();
25-
this.loadMapData();
27+
this.observer = new IntersectionObserver(
28+
(entries) => {
29+
if (entries.some((e) => e.isIntersecting) && !this.dataLoaded) {
30+
this.dataLoaded = true;
31+
this.loadMapData();
32+
this.observer?.disconnect();
33+
}
34+
},
35+
{ rootMargin: "200px" },
36+
);
37+
this.observer.observe(this);
38+
}
39+
40+
disconnectedCallback() {
41+
this.observer?.disconnect();
42+
this.observer = null;
43+
super.disconnectedCallback();
2644
}
2745

2846
private async loadMapData() {

0 commit comments

Comments
 (0)