- Rough.js ist eine leichtgewichtige JavaScript-Bibliothek, die statt klarer digitaler Formen Grafiken im Sketch-Stil erzeugt, die wie von Hand gezeichnet wirken
- Mit weniger als 9 kB gzipped ist sie klein, kann aber Linien, Kurven, Bögen, Polygone, Kreise, Ellipsen und sogar SVG paths verarbeiten
- Sie unterstützt mit demselben API-Ablauf sowohl Canvas als auch SVG, sodass je nach Rendering-Ziel
rough.canvas() oder rough.svg() gewählt werden kann
- Neben der standardmäßigen hachure-Füllung unterstützt sie
solid, zigzag, cross-hatch, dots, sunburst, dashed und zigzag-line
- Mit Optionen wie
roughness, bowing, strokeWidth, hachureAngle und hachureGap lassen sich die Unruhe der Linien und die Dichte der Füllung anpassen
Leichtgewichtige Bibliothek zum Zeichnen von Formen im Handzeichnungsstil
- Rough.js ist eine JavaScript-Bibliothek zum Erstellen von Grafiken im Sketch-Stil
- Die Bibliothek ist gzipped weniger als 9 kB groß
- Sie unterstützt sowohl Grundformen als auch Pfade
- Linien
- Kurven
- Bögen
- Polygone
- Kreise
- Ellipsen
- SVG paths
- Als Rendering-Ziel können sowohl Canvas als auch SVG verwendet werden
Installation und grundlegende Nutzung
npm install --save roughjs
- Im Code wird
roughjs importiert und verwendet
import rough from 'roughjs';
- Bei Canvas wird mit
rough.canvas() ein Kontext erstellt und anschließend eine Form gezeichnet
const rc = rough.canvas(document.getElementById('canvas'));
rc.rectangle(10, 10, 200, 200); // x, y, width, height
- Bei SVG wird mit
rough.svg() ein Node erstellt und dem SVG hinzugefügt
const rc = rough.svg(svg);
let node = rc.rectangle(10, 10, 200, 200); // x, y, width, height
svg.appendChild(node);
- Auch grundlegende APIs zum Zeichnen von Kreisen, Ellipsen und Linien werden bereitgestellt
rc.circle(80, 120, 50); // centerX, centerY, diameter
rc.ellipse(300, 100, 150, 80); // centerX, centerY, width, height
rc.line(80, 120, 300, 100); // x1, y1, x2, y2
Füllung und Anpassung des Sketch-Ausdrucks
- Füllungen werden über
fill und zugehörige Optionen festgelegt
fill: 'red' verwendet eine rote hachure-Füllung
- Mit
fillWeight wird die Linienstärke der hachure angepasst
- Mit
hachureAngle und hachureGap werden Winkel und Abstand der hachure geändert
- Mit
fillStyle: 'solid' kann eine einfarbige Füllung verwendet werden
rc.circle(50, 50, 80, { fill: 'red' });
rc.rectangle(120, 15, 80, 80, { fill: 'red' });
rc.circle(50, 150, 80, {
fill: "rgb(10,150,10)",
fillWeight: 3
});
rc.rectangle(220, 15, 80, 80, {
fill: 'red',
hachureAngle: 60,
hachureGap: 8
});
rc.rectangle(120, 105, 80, 80, {
fill: 'rgba(255,0,200,0.2)',
fillStyle: 'solid'
});
- Unterstützte Füllstile sind
hachure, solid, zigzag, cross-hatch, dots, sunburst, dashed und zigzag-line
- Die Unruhe der Linien und die Darstellung der Konturen lassen sich mit Optionen wie
roughness, bowing, stroke und strokeWidth ändern
rc.rectangle(15, 15, 80, 80, { roughness: 0.5, fill: 'red' });
rc.rectangle(120, 15, 80, 80, { roughness: 2.8, fill: 'blue' });
rc.rectangle(220, 15, 80, 80, { bowing: 6, stroke: 'green', strokeWidth: 3 });
SVG path und API-Dokumentation
- SVG-path-Strings können mit
rc.path() gezeichnet werden
rc.path('M80 80 A 45 45, 0, 0, 0, 125 125 L 125 80 Z', { fill: 'green' });
rc.path('M230 80 A 45 45, 0, 1, 0, 275 125 L 275 80 Z', { fill: 'purple' });
rc.path('M80 230 A 45 45, 0, 0, 1, 125 275 L 125 230 Z', { fill: 'red' });
rc.path('M230 230 A 45 45, 0, 1, 1, 275 275 L 275 230 Z', { fill: 'blue' });
1 Kommentare
Hacker-News-Kommentare
RoughNotation(https://roughnotation.com/) ist ebenfalls einen Blick wert. Es verwendet RoughJS und unterstützt Unterstreichungen, Hervorhebungen usw.
Meine Website wurde davon auch teilweise inspiriert; einfach mit der Maus über die hervorgehobenen Überschriften fahren: https://muxup.com/
Die Implementierung habe ich hier dokumentiert: https://muxup.com/2022q3/muxup-implementation-notes#randomly-generated-title-highlights; dort sieht man auch, dass der eigentliche Code wirklich sehr kurz ist
Vielleicht ist das beabsichtigt, aber falls nicht, hier als Hinweis. Umgebung: Chrome/Linux
Verwandte Links:
Show HN: Sketchy-appearance interactive timeline made using RoughJS - https://news.ycombinator.com/item?id=29563678 - Dezember 2021, 1 Kommentar
Rough.js – Create graphics with a hand-drawn, sketchy, appearance - https://news.ycombinator.com/item?id=29555853 - Dezember 2021, 23 Kommentare
Show HN: Hand-drawn timelines using RoughJS - https://news.ycombinator.com/item?id=23998225 - Juli 2020, 1 Kommentar
Rough.js – Create graphics with a hand-drawn, sketchy, appearance - https://news.ycombinator.com/item?id=22787187 - April 2020, 13 Kommentare
Rough.js v4.0 – hand-drawn, sketchy graphics - https://news.ycombinator.com/item?id=22141526 - Januar 2020, 20 Kommentare
Show HN: RoughJS – Create hand-drawn graphics using JavaScript - https://news.ycombinator.com/item?id=16571827 - März 2018, 92 Kommentare
Show HN: Rough.js simple lib to create hand-drawn, sketchy, scribbly graphics - https://news.ycombinator.com/item?id=13662347 - Februar 2017, 1 Kommentar
Wired Elements ist eine Sammlung von Web-Komponenten vom selben Autor und rendert im Skizzenstil mit Rough.js
Funktioniert mit jedem Framework
https://wiredjs.com/
Ich nutze es zusammen mit https://wiredjs.com für interaktive Mockups. Beispiele unten
https://edea-dev.gitlab.io/mockups/ (Quelle: https://gitlab.com/edea-dev/mockups)
https://otfn.development.fabcity.hamburg/git-pdm-mockups/
Das erinnert mich an https://excalidraw.com/
Update: Tatsächlich gibt es Fälle wie https://github.com/excalidraw/excalidraw/issues/362
Früher habe ich auf Basis von RoughJS die Datenvisualisierungsbibliothek roughviz erstellt
https://www.jwilber.me/roughviz/
Der Autor Preet hat auch viele andere tolle Projekte gemacht, daher lohnt sich ein Blick auf seine Website: https://shihn.ca/creations/
Für die Umsetzung des Sketchify-Generators von Boxy SVG (https://boxy-svg.com/ideas/23) habe ich Rough.js verwendet
Besonders gut an Rough.js ist, dass es nur sehr wenige Abhängigkeiten hat und auch in Web Workern ausgeführt werden kann
Großartige Bibliothek. Ich habe sie verwendet, als ich den Wrapper svg2roughjs erstellt habe, um normale SVG-Dateien in einen Skizzenstil umzuwandeln: https://github.com/fskpf/svg2roughjs
Rough.js ist sehr reizvoll. Ich verwende es auf https://www.vanillacomponents.com/ zum Zeichnen eines Datengitters
Ich mag Rough.js. Ich habe es verwendet, um Sketchy Shapes zu erstellen, die man dem Hatch-Projekt hinzufügen kann
Es macht Spaß, die Parameter in Echtzeit zu verändern: https://hatch.one/@darrin/sketchy-shapes/edit