diff --git a/src/components/scroll-fading-title/ScrollFadingTitle.tsx b/src/components/scroll-fading-title/ScrollFadingTitle.tsx index 0690c9a..8f5af25 100644 --- a/src/components/scroll-fading-title/ScrollFadingTitle.tsx +++ b/src/components/scroll-fading-title/ScrollFadingTitle.tsx @@ -18,10 +18,10 @@ export const ScrollFadingTitle = (props: ComponentProps<"div">) => { }; handleScroll(); - window.addEventListener('scroll', handleScroll); + window.addEventListener('scroll', handleScroll, {passive: true}); return () => window.removeEventListener('scroll', handleScroll); }, [elementRef]); - return
+ return
}; \ No newline at end of file diff --git a/src/components/sidebar-trigger-adjustable/SidebarTriggerAdjustable.tsx b/src/components/sidebar-trigger-adjustable/SidebarTriggerAdjustable.tsx index 3df3eec..1c53662 100644 --- a/src/components/sidebar-trigger-adjustable/SidebarTriggerAdjustable.tsx +++ b/src/components/sidebar-trigger-adjustable/SidebarTriggerAdjustable.tsx @@ -1,12 +1,21 @@ "use client"; import { useIsMobile } from "@/hooks/use-mobile"; import { cn } from "@/lib/utils"; +import { sign } from "crypto"; import { ComponentProps, useEffect, useState } from "react"; const easeSlide = (x: number) => ( 1 - Math.pow(1 - x, 3) ); +const lerp = (a: number, b: number, t: number) => ( + a * t + b * (1 - t) +); +const cssLerp = (a: string, b: string, t: string) => ( + `${a} * ${t} + ${b} * (1 - ${t})` +); + + export const SidebarTriggerAdjustable = (props: ComponentProps<"div">) => { const isMobile = useIsMobile(); @@ -22,10 +31,12 @@ export const SidebarTriggerAdjustable = (props: ComponentProps<"div">) => { const slideAmount = easeSlide( Math.max(0, Math.min(1, window.scrollY / (window.innerHeight / 20))) ); - triggerDiv.style.marginLeft = `calc(var(--spacing) * ${12 * slideAmount})`; + triggerDiv.style.transform = `translateX(calc(var(--spacing) * ${12 * slideAmount}))`; triggerDiv.style.paddingTop = `calc(var(--spacing) * ${(isMobile ? 1 : 3) * slideAmount})`; + triggerDiv.style.width = `calc(100% - var(--spacing) * ${lerp(0, 12, 1 - slideAmount)})`; }; + handleScroll(); window.addEventListener('scroll', handleScroll, {passive: true}); return () => { @@ -33,5 +44,5 @@ export const SidebarTriggerAdjustable = (props: ComponentProps<"div">) => { }; }, [isMobile]); - return
; + return
; } \ No newline at end of file