mirror of
https://github.com/timmypidashev/web.git
synced 2026-04-14 02:53:51 +00:00
mobile optimizations
This commit is contained in:
@@ -77,11 +77,13 @@ function readBgFromCSS(): string {
|
||||
interface BackgroundProps {
|
||||
layout?: "index" | "sidebar" | "content";
|
||||
position?: "left" | "right";
|
||||
mobileOnly?: boolean;
|
||||
}
|
||||
|
||||
const Background: React.FC<BackgroundProps> = ({
|
||||
layout = "index",
|
||||
position = "left",
|
||||
mobileOnly = false,
|
||||
}) => {
|
||||
const canvasRef = useRef<HTMLCanvasElement>(null);
|
||||
const engineRef = useRef<AnimationEngine | null>(null);
|
||||
@@ -330,7 +332,9 @@ const Background: React.FC<BackgroundProps> = ({
|
||||
|
||||
const getContainerClasses = () => {
|
||||
if (isIndex) {
|
||||
return "fixed inset-0 -z-10";
|
||||
return mobileOnly
|
||||
? "fixed inset-0 -z-10 lg:hidden"
|
||||
: "fixed inset-0 -z-10";
|
||||
}
|
||||
|
||||
const baseClasses = "fixed top-0 bottom-0 hidden lg:block -z-10";
|
||||
|
||||
@@ -56,13 +56,22 @@ export function StreamContent({ children }: { children: React.ReactNode }) {
|
||||
return;
|
||||
}
|
||||
|
||||
container.classList.remove("stream-hidden");
|
||||
|
||||
// Set inline opacity:0 on every block BEFORE removing the CSS class
|
||||
// This prevents the flash of visible content between class removal and style application
|
||||
blocks.forEach((el) => {
|
||||
el.style.opacity = "0";
|
||||
el.style.transform = "translate3d(0,16px,0)";
|
||||
el.style.transition = "opacity 0.6s ease-out, transform 0.6s ease-out";
|
||||
el.style.willChange = "transform, opacity";
|
||||
});
|
||||
|
||||
// Now safe to remove the CSS class — inline styles keep everything hidden
|
||||
container.classList.remove("stream-hidden");
|
||||
|
||||
// Add transition properties in the next frame so the initial state is set first
|
||||
requestAnimationFrame(() => {
|
||||
blocks.forEach((el) => {
|
||||
el.style.transition = "opacity 0.6s ease-out, transform 0.6s ease-out";
|
||||
el.style.willChange = "transform, opacity";
|
||||
});
|
||||
});
|
||||
|
||||
const observer = new IntersectionObserver(
|
||||
|
||||
@@ -56,13 +56,9 @@ const ogImage = "https://timmypidashev.dev/og-image.jpg";
|
||||
</head>
|
||||
<body class="bg-background text-foreground min-h-screen flex flex-col">
|
||||
<Header client:load />
|
||||
<!-- Mobile: full-screen background -->
|
||||
<div class="lg:hidden">
|
||||
<Background layout="index" client:only="react" transition:persist />
|
||||
</div>
|
||||
<Background layout="index" mobileOnly client:only="react" transition:persist />
|
||||
<main class="flex-1 flex flex-col">
|
||||
<div class="max-w-5xl mx-auto pt-2 lg:pt-12 px-4 py-4 lg:py-8 pb-20 lg:pb-8 flex-1 relative z-10">
|
||||
<!-- Desktop: sidebar strips -->
|
||||
<Background layout="content" position="right" client:only="react" transition:persist />
|
||||
<div>
|
||||
<slot />
|
||||
|
||||
@@ -41,7 +41,7 @@ const ogImage = "https://timmypidashev.dev/og-image.jpg";
|
||||
<script is:inline set:html={THEME_LOADER_SCRIPT} />
|
||||
<script is:inline set:html={ANIMATION_LOADER_SCRIPT} />
|
||||
</head>
|
||||
<body class="bg-background text-foreground">
|
||||
<body class="bg-background text-foreground overflow-hidden h-screen">
|
||||
<Header client:load transparent />
|
||||
<main transition:animate="fade">
|
||||
<Background layout="index" client:only="react" transition:persist />
|
||||
|
||||
@@ -55,13 +55,9 @@ const ogImage = "https://timmypidashev.dev/og-image.jpg";
|
||||
<script is:inline set:html={ANIMATION_LOADER_SCRIPT} />
|
||||
</head>
|
||||
<body class="bg-background text-foreground min-h-screen flex flex-col">
|
||||
<!-- Mobile: full-screen background -->
|
||||
<div class="lg:hidden">
|
||||
<Background layout="index" client:only="react" transition:persist />
|
||||
</div>
|
||||
<Background layout="index" mobileOnly client:only="react" transition:persist />
|
||||
<main class="flex-1 flex flex-col">
|
||||
<div class="max-w-5xl mx-auto pt-2 lg:pt-12 px-4 py-4 lg:py-8 flex-1 relative z-10">
|
||||
<!-- Desktop: sidebar strips -->
|
||||
<Background layout="content" position="right" client:only="react" transition:persist />
|
||||
<div>
|
||||
<slot />
|
||||
|
||||
Reference in New Issue
Block a user