Waves

stable 1.8 kB
<hk-waves>

Each band sums three sines at unrelated frequencies — one wave alone reads as obviously mechanical, three make the crest wander the way water does. Sampled every six pixels, which is indistinguishable from per-pixel and costs a sixth as much.

#background#canvas#decorative

Live demo

Running in this page — interact with it.

Inputs

NameTypeDefaultDescription
colorstring'#dc2626'Base colour. Any hex the background derives its palette from.
speednumber1Animation multiplier. 0 freezes on the first frame.
opacitynumber1Canvas opacity — these sit behind real content.
pausedbooleanfalseStops the loop without unmounting.
layersnumber4How many stacked bands.
amplitudenumber34Crest height in px.
wavelengthnumber280Horizontal wavelength in px.
filledbooleantrueFills under each crest instead of stroking only.

Theming

Component tokens, each falling back to a global one:

PropertyDefaultControls
--hk-bg-color#dc2626Base hue. Every background derives its palette from it.

Accessibility

  • The canvas is aria-hidden — a decorative layer must never be announced.
  • Under prefers-reduced-motion it paints one frame and never starts the loop.
  • The loop stops when the element scrolls out of view and when the tab is hidden, so an offscreen background costs nothing.
  • Frames run outside the Angular zone, so animating never triggers change detection in the rest of the app.

More in Backgrounds