refactor: improve map preview transition and layout stability with opacity animations and adjusted loading delay
Build and Release / release (push) Successful in 36s
Build and Release / release (push) Successful in 36s
This commit is contained in:
@@ -141,8 +141,8 @@ export default function MapPlaceholder({ onEnter }: MapPlaceholderProps) {
|
|||||||
<style dangerouslySetInnerHTML={{
|
<style dangerouslySetInnerHTML={{
|
||||||
__html: `
|
__html: `
|
||||||
@keyframes placeholder-pulse {
|
@keyframes placeholder-pulse {
|
||||||
0%, 100% { opacity: 0.35; transform: scale(0.98); }
|
0%, 100% { opacity: 0.35; }
|
||||||
50% { opacity: 0.95; transform: scale(1); }
|
50% { opacity: 0.95; }
|
||||||
}
|
}
|
||||||
`}} />
|
`}} />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ export default function PublicPreviewClientPage({
|
|||||||
} else {
|
} else {
|
||||||
const timer = setTimeout(() => {
|
const timer = setTimeout(() => {
|
||||||
setLoadInteractiveMap(true);
|
setLoadInteractiveMap(true);
|
||||||
}, 2000);
|
}, 2500);
|
||||||
return () => clearTimeout(timer);
|
return () => clearTimeout(timer);
|
||||||
}
|
}
|
||||||
}, [instantLoad]);
|
}, [instantLoad]);
|
||||||
@@ -794,6 +794,15 @@ export default function PublicPreviewClientPage({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
position: "absolute",
|
||||||
|
inset: 0,
|
||||||
|
visibility: userHasEntered ? "visible" : "hidden",
|
||||||
|
opacity: userHasEntered ? 1 : 0,
|
||||||
|
transition: "opacity 0.8s cubic-bezier(0.4, 0, 0.2, 1), visibility 0.8s",
|
||||||
|
}}
|
||||||
|
>
|
||||||
{isBackgroundVisibilityReady && loadInteractiveMap && (
|
{isBackgroundVisibilityReady && loadInteractiveMap && (
|
||||||
<PreviewMapShell
|
<PreviewMapShell
|
||||||
mapHandleRef={mapHandleRef}
|
mapHandleRef={mapHandleRef}
|
||||||
@@ -891,21 +900,6 @@ export default function PublicPreviewClientPage({
|
|||||||
</PreviewMapShell>
|
</PreviewMapShell>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Smooth transition loading overlay */}
|
|
||||||
<div
|
|
||||||
style={{
|
|
||||||
position: "fixed",
|
|
||||||
inset: 0,
|
|
||||||
zIndex: 9999,
|
|
||||||
pointerEvents: userHasEntered ? "none" : "auto",
|
|
||||||
opacity: userHasEntered ? 0 : 1,
|
|
||||||
visibility: userHasEntered ? "hidden" : "visible",
|
|
||||||
transition: "opacity 0.8s cubic-bezier(0.4, 0, 0.2, 1), visibility 0.8s",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<MapPlaceholder onEnter={onEnter} />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{linkEntityPopup ? (
|
{linkEntityPopup ? (
|
||||||
<div
|
<div
|
||||||
ref={linkEntityPopupRef}
|
ref={linkEntityPopupRef}
|
||||||
@@ -1006,6 +1000,22 @@ export default function PublicPreviewClientPage({
|
|||||||
/>
|
/>
|
||||||
</aside>
|
</aside>
|
||||||
) : null}
|
) : null}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Smooth transition loading overlay */}
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
position: "fixed",
|
||||||
|
inset: 0,
|
||||||
|
zIndex: 9999,
|
||||||
|
pointerEvents: userHasEntered ? "none" : "auto",
|
||||||
|
opacity: userHasEntered ? 0 : 1,
|
||||||
|
visibility: userHasEntered ? "hidden" : "visible",
|
||||||
|
transition: "opacity 0.8s cubic-bezier(0.4, 0, 0.2, 1), visibility 0.8s",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<MapPlaceholder onEnter={onEnter} />
|
||||||
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,14 +88,6 @@ export default function PublicPreviewWrapper() {
|
|||||||
};
|
};
|
||||||
}, [handleEnter, mapEntered]);
|
}, [handleEnter, mapEntered]);
|
||||||
|
|
||||||
if (!mapEntered && !instantLoad) {
|
|
||||||
return (
|
|
||||||
<MapPlaceholder
|
|
||||||
onEnter={handleEnter}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PublicPreviewClientPage
|
<PublicPreviewClientPage
|
||||||
userHasEntered={mapEntered}
|
userHasEntered={mapEntered}
|
||||||
|
|||||||
Reference in New Issue
Block a user