import { IEventSubscription } from "../domain/events/IEventHandler"; export function registerSticky(el: HTMLElement): IEventSubscription { el.style.position = "relative"; let parent: HTMLElement | null = el.parentElement; while (true) { if (!parent) break; if (["auto", "scroll", "hidden"].includes(getComputedStyle(parent).overflow)) break; if (parent === parent.parentElement) break; parent = parent.parentElement; } if (!parent) throw new Error("no parent found"); function scrollEvent(e?: Event) { if (!parent) return; const newTop = Math.max(0, parent.scrollTop); el.style.top = `${newTop}px`; } parent.addEventListener("scroll", scrollEvent); scrollEvent(); return { unsubscribe: () => parent!.removeEventListener("scroll", scrollEvent) }; }
530210cookie-checkTypescript register sticky (for when CSS sticky does not work)