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 hilftWann 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.
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
ResizeObserverand re-runsyncCanvasSize+ an immediate render pass when dimensions change (because changingcanvas.widthclears the canvas buffer).
Frame-Rate Independent Loop & Offscreen Pausing
- Delta-time (
dt) integration:- Never advance positions by a fixed pixel step per
requestAnimationFrametick (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})$$
- Never advance positions by a fixed pixel step per
- Zero-allocation render loop:
- Never allocate
new Path2D(), objects, arrays, or gradient instances inside the per-framerender()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 (
OffscreenCanvasor hidden<canvas>) and composite viactx.drawImage().
- Never allocate
- Sleep when idle or offscreen:
- Stop the
requestAnimationFrameloop when all springs/particles have settled within $\epsilon$ of rest, and restart it on pointer/scroll/state events. - Pause rendering whenever
IntersectionObserverreports the canvas is outside the viewport ordocument.hiddenis true.
- Stop the
Pointer Interaction & Accessibility Overlay
- Coordinate mapping: Convert client pointer events (
PointerEvent) to logical canvas coordinates viaconst 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 honorprefers-reduced-motion: reduceby 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.
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.
