Håndbyggede komponenter

Et par komponenter, håndbyggede af en Jyde.

Intet framework, intet komponentbibliotek — håndskrevet CSS og vanilla JS, samme regel som resten af sitet. Hver af dem herunder genbruger sitets egne design-tokens (den koniske gradient-ring bruger samme teknik som timerne på Live Sessions/Analytics). Hold musen over, træk og klik dig igennem dem.

Vil du se bag kulisserne? Alt på denne side administreres gennem et fuldt håndbygget admin-system — analyse, en selvlærende bot-klassifikator, indholdsredigering og mere. Se hvordan det er sat sammen, eller prøv det selv med et sikkert demo-login. Se admin-systemet →

Magnetisk hover

mousemove-sporing, dæmpet med en dæmpningsfaktor

Knappen bevæger sig mod musemarkøren ved hvert mousemove, dæmpet til omkring en tredjedel af den rå forskydning, så det føles som om den bliver trukket i stedet for at følge præcist — og springer tilbage i samme øjeblik markøren forlader den. Springes helt over på berøringsenheder via @media (hover: hover), da der ikke er nogen markør at spore.

Fremgangsring

conic-gradient + animérbar @property
0% udrullet

Samme donut-ring-mønster som driver nedtællingstimerne på Live Sessions og auto-opdateringsringen på Analytics — en CSS custom property registreret med @property, så browseren kan animere gradient-vinklen direkte uden en JS-animationsløkke.

Segmenteret kontrol

glidende markør, bredde læst fra DOM'en

Markørens bredde og position måles fra selve den knap, den følger — ikke gættet som en procentdel — så den forbliver pixel-præcis, uanset hvordan label-teksten ombrydes.

Notifikationsstak

stablede notifikationer, selv-afvisende

Hvert klik stabler en ny notifikation ovenpå den forrige og rydder sig selv efter et par sekunder — klik hurtigt et par gange for at se dem stille sig i kø.

Rigt tooltip

forsinket visning, back-out-easing
Hold musen over eller fokusér mig En kort visningsforsinkelse forhindrer det i at blinke ved en hurtig musepassage, og det er gated bag @media (hover: hover), så det aldrig bliver et dødt tryk-mål på en telefon.

Samme tooltip-sprog som dokumenteret for sitets navigation — fade + skalering med et let overshoot ved indtræden, vises aldrig som et touch-mål.

Kommandopalet

native <dialog>, tastatur-først

Bygget på det native <dialog>-element — gratis fokus-indfangning, Escape-for-at-lukke og top-layer-stakning uden at røre en z-index-skala. Prøv tastaturgenvejen, piletaster for at flytte, Enter for at hoppe.

Træk for at omarrangere

pointer events, intet bibliotek
  • 1 Hærd session-cookies
  • 2 Tilføj IP-nøglet drosling
  • 3 Udrul analyse-dashboardet
  • 4 Skriv ændringsloggen

Rå pointerdown/pointermove-sporing med touch-action: none — virker identisk med mus, touchpad og berøring, intet drag-and-drop-bibliotek. Fuldt tastaturbetjenbar: Tab til et emne, mellemrum for at samle op, piletaster for at flytte, mellemrum eller Escape for at slippe.

Kopiér til udklipsholder

Clipboard API + aria-live bekræftelse
curl -sI https://henrikbr.dk

Bruger navigator.clipboard.writeText() direkte, intet fallback-trick med en skjult tekstboks. Knappens tekst og ikon skifter kortvarigt for at bekræfte kopieringen, og en skærmlæser får samme bekræftelse gennem en skjult aria-live-region, ikke kun det visuelle skift.

Swipe for at fjerne

pointer-events, tærskel + tilbagefjeder
Swipe eller træk
Fjern mig

Træk forbi en tærskel, og kortet flyver væk og nulstilles et øjeblik efter, så du kan prøve igen — slip for tidligt, og det fjedrer tilbage i stedet. Virker identisk med mus, touchpad eller en finger, og Enter fjerner det uden at røre pointeren overhovedet.

Live relativ tid

Intl.RelativeTimeFormat, 600× hastighed
Udgivet  

Formaterer et tidsstempel på samme måde som browserens indbyggede sprogdata ville gøre — „for 2 minutter siden“, „for en time siden“ — med Intl.RelativeTimeFormat i stedet for en håndskrevet opslagstabel. Sat 600× op i fart her, så du kan se den rulle fra sekunder til minutter til timer, i stedet for at vente i realtid.

Før/efter-slider

clip-path-maskering, træk + tastatur
Før
Efter

Træk i håndtaget, eller fokusér det og brug piletasterne — Home/End springer direkte til hver ende. Afsløringen er blot en clip-path: inset() på det øverste lag, ingen billedudskiftning eller canvas involveret.

Konfetti-eksplosion

canvas + håndbygget partikelfysik

60 firkanter affyres fra knappen med tilfældig hastighed og rotation, hvorefter tyngdekraft, luftmodstand og udtoning overtager hver frame, indtil de er væk. Intet bibliotek — bare et <canvas>, et array af partikler og en requestAnimationFrame-løkke.

Optællende statistik

IntersectionObserver-udløst
0
år dette blev udrullet
0
års praktisk erfaring
0
anvendte frameworks
0
% selv-hostet

Det var laboratoriet.

Alt ovenfor er bygget på samme måde som resten af siden — håndskrevet, ingen genveje. Vil du se, hvor de her teknikker faktisk bliver brugt, eller læse mere om personen bag dem, er her, du skal videre hen.