- Rough.js es una biblioteca ligera de JavaScript para crear gráficos con estilo de boceto en lugar de formas digitales nítidas
- Aunque pesa menos de 9 kB gzipped, puede manejar líneas, curvas, arcos, polígonos, círculos, elipses e incluso SVG path
- Con el mismo flujo de API, soporta tanto Canvas como SVG, por lo que puedes elegir
rough.canvas() o rough.svg() según el destino de renderizado
- Además del relleno predeterminado hachure, soporta
solid, zigzag, cross-hatch, dots, sunburst, dashed, zigzag-line
- Con opciones como
roughness, bowing, strokeWidth, hachureAngle, hachureGap puedes ajustar la vibración de las líneas y la densidad del relleno
Biblioteca ligera para dibujar figuras con estilo hecho a mano
- Rough.js es una biblioteca de JavaScript para crear gráficos con apariencia de boceto
- El tamaño de la biblioteca es de menos de 9 kB gzipped
- Soporta tanto figuras básicas como rutas
- líneas
- curvas
- arcos
- polígonos
- círculos
- elipses
- SVG paths
- Como destino de renderizado, se pueden usar tanto Canvas como SVG
Instalación y uso básico
npm install --save roughjs
- En el código, se importa y usa
roughjs
import rough from 'roughjs';
- En Canvas, se crea el contexto con
rough.canvas() y luego se dibujan las figuras
const rc = rough.canvas(document.getElementById('canvas'));
rc.rectangle(10, 10, 200, 200); // x, y, width, height
- En SVG, se crea el nodo con
rough.svg() y se agrega al SVG
const rc = rough.svg(svg);
let node = rc.rectangle(10, 10, 200, 200); // x, y, width, height
svg.appendChild(node);
- También ofrece APIs básicas para dibujar círculos, elipses y líneas
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
Relleno y ajuste de la expresión tipo boceto
- El relleno se configura con
fill y opciones relacionadas
fill: 'red' usa un relleno hachure rojo
fillWeight ajusta el grosor de las líneas del hachure
hachureAngle y hachureGap cambian el ángulo y el espaciado del hachure
fillStyle: 'solid' permite usar un relleno de color sólido
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'
});
- Los estilos de relleno soportados son
hachure, solid, zigzag, cross-hatch, dots, sunburst, dashed, zigzag-line
- La vibración de las líneas y la apariencia del contorno pueden cambiarse con opciones como
roughness, bowing, stroke, strokeWidth
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 y documentación de la API
- Las cadenas de SVG path pueden dibujarse con
rc.path()
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 comentarios
Comentarios en Hacker News
RoughNotation(https://roughnotation.com/) también vale la pena revisar. Usa RoughJS para soportar subrayados, resaltados, etc.
Mi sitio web también tomó algo de inspiración de ahí; solo hay que pasar el mouse sobre el título resaltado: https://muxup.com/
La implementación está resumida en https://muxup.com/2022q3/muxup-implementation-notes#randomly-generated-title-highlights, y si entras verás que el código real es realmente muy poco
Puede que sea el comportamiento intencional, pero si no lo es, lo dejo como referencia. Mi entorno es Chrome/Linux
Material relacionado:
Show HN: Sketchy-appearance interactive timeline made using RoughJS - https://news.ycombinator.com/item?id=29563678 - diciembre de 2021, 1 comentario
Rough.js – Create graphics with a hand-drawn, sketchy, appearance - https://news.ycombinator.com/item?id=29555853 - diciembre de 2021, 23 comentarios
Show HN: Hand-drawn timelines using RoughJS - https://news.ycombinator.com/item?id=23998225 - julio de 2020, 1 comentario
Rough.js – Create graphics with a hand-drawn, sketchy, appearance - https://news.ycombinator.com/item?id=22787187 - abril de 2020, 13 comentarios
Rough.js v4.0 – hand-drawn, sketchy graphics - https://news.ycombinator.com/item?id=22141526 - enero de 2020, 20 comentarios
Show HN: RoughJS – Create hand-drawn graphics using JavaScript - https://news.ycombinator.com/item?id=16571827 - marzo de 2018, 92 comentarios
Show HN: Rough.js simple lib to create hand-drawn, sketchy, scribbly graphics - https://news.ycombinator.com/item?id=13662347 - febrero de 2017, 1 comentario
Wired Elements es una colección de componentes web del mismo autor, y hace el renderizado con estilo de boceto usando Rough.js
Funciona con cualquier framework
https://wiredjs.com/
Lo estoy usando junto con https://wiredjs.com para crear mockups interactivos. Algunos ejemplos abajo
https://edea-dev.gitlab.io/mockups/ (fuente: https://gitlab.com/edea-dev/mockups)
https://otfn.development.fabcity.hamburg/git-pdm-mockups/
Me hace pensar en https://excalidraw.com/
Actualización: de hecho hay casos como https://github.com/excalidraw/excalidraw/issues/362
Hace tiempo hice roughviz, una librería de visualización de datos basada en RoughJS
https://www.jwilber.me/roughviz/
Su autor, Preet, también ha hecho muchos otros proyectos geniales, así que también vale la pena revisar su sitio: https://shihn.ca/creations/
Usé Rough.js para implementar el generador Sketchify de Boxy SVG (https://boxy-svg.com/ideas/23)
Lo mejor de Rough.js es que tiene muy pocas dependencias y que incluso puede ejecutarse dentro de un web worker
Es una librería excelente. La usé al hacer svg2roughjs, un wrapper para convertir archivos SVG normales a estilo de boceto: https://github.com/fskpf/svg2roughjs
Rough.js es muy encantador. Lo estoy usando en https://www.vanillacomponents.com/ para dibujar una cuadrícula de datos
Me gusta Rough.js. Lo usé al hacer Sketchy Shapes, que se puede agregar al proyecto Hatch
Es divertido ir cambiando los parámetros en tiempo real: https://hatch.one/@darrin/sketchy-shapes/edit