← Zurück zum Katalog

Skill · Version 1.0.0

Interaktive Canvas-Grafik

Baut responsive Canvas-Grafiken mit korrekter Pixeldichte, stabiler Animation und bedienbaren Alternativen zu reiner Bitmap-Interaktion.

canvas-interactive-graphics

Entdecke, wie der Skill hilft

Wann ist der Skill hilfreich?

Nutze ihn für präzise interaktive Diagramme oder Animationen, die Tastatur- und Hilfstechnologienutzer einschließen sollen.

Wobei hilft er dir?

  • Passt Zeichenauflösung an die Pixeldichte des Displays an.
  • Verwendet verstrichene Zeit und pausiert unsichtbares Rendering.
  • Ordnet Zeigertreffer zu und ergänzt zugängliche HTML-Bedienelemente.

Das könntest du fragen

Baue eine interaktive Knotenfläche mit Tastaturalternativen und reduzierter Bewegung. Wähle einen Knoten per Tastatur und Zeiger und scrolle die Fläche aus dem Bild. Beide Eingaben treffen denselben Knoten; unsichtbares Rendern pausiert.

Ausführliche Dokumentation

Hier findest du die ursprüngliche Anleitung, Beispiele und Prüfschritte des Skills in ihrer Originalsprache.

Details…Weniger anzeigen

Canvas & Interactive Graphics

Reach for HTML5 <canvas> when a scene animates hundreds of simultaneous elements (particle fields, live node-link topologies, waveform visualizers, spatial grids) where individual DOM/SVG nodes would bottleneck layout and style recalculation.

Crisp High-DPI (devicePixelRatio) Setup & Resize

A raw <canvas width="800" height="600"> looks blurry on Retina/high-DPI screens. Always decouple logical CSS coordinates from physical backing-store pixels:

function syncCanvasSize(canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D, cssWidth: number, cssHeight: number) {
  const dpr = Math.min(window.devicePixelRatio || 1, 2); // Cap at 2x to protect fill-rate on 3x/4x mobile screens
  canvas.width = Math.round(cssWidth * dpr);
  canvas.height = Math.round(cssHeight * dpr);
  canvas.style.width = `${cssWidth}px`;
  canvas.style.height = `${cssHeight}px`;
  ctx.setTransform(dpr, 0, 0, dpr, 0, 0); // Draw in logical CSS pixels everywhere else
}
  • Observe the container with ResizeObserver and re-run syncCanvasSize + an immediate render pass when dimensions change (because changing canvas.width clears the canvas buffer).

Frame-Rate Independent Loop & Offscreen Pausing

  1. Delta-time (dt) integration:
    • Never advance positions by a fixed pixel step per requestAnimationFrame tick (x += 2), which runs twice as fast on 120Hz displays as on 60Hz displays.
    • Compute elapsed seconds const dt = Math.min((now - lastTime) / 1000, 0.05); and use frame-rate independent exponential damping for smooth pointer/camera follow: $$\text{value} = \text{lerp}(\text{value}, \text{target}, 1 - e^{-\lambda \cdot dt})$$
  2. Zero-allocation render loop:
    • Never allocate new Path2D(), objects, arrays, or gradient instances inside the per-frame render() loop—GC pauses cause visible frame drops. Pre-allocate typed arrays or object pools during setup.
    • Cache static background grids or complex vector stamps onto an offscreen canvas (OffscreenCanvas or hidden <canvas>) and composite via ctx.drawImage().
  3. Sleep when idle or offscreen:
    • Stop the requestAnimationFrame loop when all springs/particles have settled within $\epsilon$ of rest, and restart it on pointer/scroll/state events.
    • Pause rendering whenever IntersectionObserver reports the canvas is outside the viewport or document.hidden is true.

Pointer Interaction & Accessibility Overlay

  • Coordinate mapping: Convert client pointer events (PointerEvent) to logical canvas coordinates via const rect = canvas.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top;.
  • Accessible DOM twin: Because <canvas> is a single opaque bitmap to assistive tech, never draw interactive buttons or essential text solely inside Canvas. Overlay semantic, keyboard-focusable HTML buttons/controls positioned over the canvas (or provide a synchronized accessible list/table inside the container) and honor prefers-reduced-motion: reduce by rendering a calm static or step-driven frame.

Enthaltene Dateien 1

  • SKILL.md

Über dieses Skill-Paket

canvas-interactive-graphics

canvas-interactive-graphics: Macht Oberflächen mit gezielter Animation, responsiver Grafik und gemessener Rendering-Leistung ausdrucksstark und interaktiv.

Details…Weniger anzeigen

canvas-interactive-graphics

canvas-interactive-graphics: Macht Oberflächen mit gezielter Animation, responsiver Grafik und gemessener Rendering-Leistung ausdrucksstark und interaktiv.

Enthält den vollständigen Skill und seine Begleitdateien (1 Dateien). Der genaue, ursprünglich verfasste Anwendungsbereich bleibt unten erhalten.

Ursprüngliche Skill-Beschreibung (Quellsprache)

Use when building HTML5 2D Canvas animations, interactive particle/node graphs, data visualizations, high-DPI rendering loops, or hit-tested custom graphics.

Installiere den Skill, prüfe seine Quelle und Vertrauenseinstellungen und aktiviere ihn für das passende Projekt oder den Agenten.

Voraussetzungen

  • Orqestria auf deinem Computer installiert.