- Rough.js, keskin dijital şekiller yerine elle çizilmiş gibi görünen eskiz stili grafikler oluşturan hafif bir JavaScript kütüphanesidir
- gzipped halde 9 kB'den küçük olmasına rağmen çizgi, eğri, yay, çokgen, daire, elips ve hatta SVG path ile çalışabilir
- Aynı API akışıyla hem Canvas hem de SVG destekler; render hedefine göre
rough.canvas() veya rough.svg() seçilebilir
- Varsayılan dolgu olan hachure dışında
solid, zigzag, cross-hatch, dots, sunburst, dashed, zigzag-line desteği sunar
roughness, bowing, strokeWidth, hachureAngle, hachureGap gibi seçeneklerle çizgilerin titrekliğini ve dolgu yoğunluğunu ayarlayabilirsiniz
Elle çizilmiş görünümlü şekiller çizen hafif kütüphane
- Rough.js, eskiz tarzı grafikler oluşturmak için kullanılan bir JavaScript kütüphanesidir
- Kütüphane boyutu gzipped halde 9 kB'den küçüktür
- Temel şekilleri ve path'leri birlikte destekler
- Render hedefi olarak hem Canvas hem de SVG kullanılabilir
Kurulum ve temel kullanım
npm install --save roughjs
- Kodda
roughjs içe aktarılıp kullanılır
import rough from 'roughjs';
- Canvas'ta
rough.canvas() ile context oluşturduktan sonra şekil çizilir
const rc = rough.canvas(document.getElementById('canvas'));
rc.rectangle(10, 10, 200, 200); // x, y, width, height
- SVG'de
rough.svg() ile node oluşturulup SVG'ye eklenir
const rc = rough.svg(svg);
let node = rc.rectangle(10, 10, 200, 200); // x, y, width, height
svg.appendChild(node);
- Daire, elips ve çizgi çizmek için temel API de sunulur
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
Dolguyu ve eskiz ifadesini ayarlama
- Dolgu,
fill ve ilgili seçeneklerle ayarlanır
fill: 'red', kırmızı renkli hachure dolgusu kullanır
fillWeight ile hachure çizgi kalınlığı ayarlanır
hachureAngle ve hachureGap ile hachure açısı ve aralığı değiştirilir
fillStyle: 'solid' ile tek renk dolgu kullanılabilir
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'
});
- Desteklenen dolgu stilleri
hachure, solid, zigzag, cross-hatch, dots, sunburst, dashed, zigzag-line şeklindedir
- Çizginin titrekliği ve kontur görünümü
roughness, bowing, stroke, strokeWidth gibi seçeneklerle değiştirilebilir
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 ve API belgeleri
- SVG path dizeleri
rc.path() ile çizilebilir
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 yorum
Hacker News yorumları
RoughNotation(https://roughnotation.com/) da bakmaya değer. RoughJS kullanarak alt çizgi, vurgulama vb. destekliyor.
Benim web sitem de buradan biraz ilham aldı; vurgulanmış başlığın üzerine fareyle gelmeniz yeterli: https://muxup.com/
Uygulama biçimini https://muxup.com/2022q3/muxup-implementation-notes#randomly-generated-title-highlights adresinde özetledim; girip bakarsanız gerçek kodun gerçekten çok az olduğunu görebilirsiniz.
Kasıtlı bir davranış olabilir ama değilse diye not düşüyorum. Ortamım Chrome/Linux.
İlgili kaynaklar:
Show HN: Sketchy-appearance interactive timeline made using RoughJS - https://news.ycombinator.com/item?id=29563678 - Aralık 2021, 1 yorum
Rough.js – Create graphics with a hand-drawn, sketchy, appearance - https://news.ycombinator.com/item?id=29555853 - Aralık 2021, 23 yorum
Show HN: Hand-drawn timelines using RoughJS - https://news.ycombinator.com/item?id=23998225 - Temmuz 2020, 1 yorum
Rough.js – Create graphics with a hand-drawn, sketchy, appearance - https://news.ycombinator.com/item?id=22787187 - Nisan 2020, 13 yorum
Rough.js v4.0 – hand-drawn, sketchy graphics - https://news.ycombinator.com/item?id=22141526 - Ocak 2020, 20 yorum
Show HN: RoughJS – Create hand-drawn graphics using JavaScript - https://news.ycombinator.com/item?id=16571827 - Mart 2018, 92 yorum
Show HN: Rough.js simple lib to create hand-drawn, sketchy, scribbly graphics - https://news.ycombinator.com/item?id=13662347 - Şubat 2017, 1 yorum
Wired Elements, aynı yazarın yaptığı bir web bileşenleri koleksiyonu; Rough.js ile eskiz tarzı render yapıyor.
Herhangi bir framework ile çalışıyor.
https://wiredjs.com/
Etkileşimli mockup oluştururken https://wiredjs.com ile birlikte kullanıyorum. Örnekler aşağıdaki gibi:
https://edea-dev.gitlab.io/mockups/ (kaynak: https://gitlab.com/edea-dev/mockups)
https://otfn.development.fabcity.hamburg/git-pdm-mockups/
https://excalidraw.com/ aklıma geliyor.
Güncelleme: Gerçekten de https://github.com/excalidraw/excalidraw/issues/362 gibi örnekler var.
Eskiden RoughJS tabanlı veri görselleştirme kütüphanesi roughviz’i yapmıştım.
https://www.jwilber.me/roughviz/
Yazarı Preet’in başka pek çok harika projesi de var; sitesine de bakmaya değer: https://shihn.ca/creations/
Boxy SVG’nin Sketchify oluşturucusunu(https://boxy-svg.com/ideas/23) uygulamak için Rough.js kullandım.
Rough.js’nin bağımlılıklarının çok az olması ve web worker içinde de çalıştırılabilmesi özellikle hoşuma gidiyor.
Harika bir kütüphane. Normal SVG dosyalarını eskiz tarzına dönüştüren svg2roughjs sarmalayıcısını yaparken kullandım: https://github.com/fskpf/svg2roughjs
Rough.js çok çekici. https://www.vanillacomponents.com/ üzerinde veri ızgarası çizmek için kullanıyorum.
Rough.js’yi seviyorum. Hatch projesine eklenebilecek Sketchy Shapes’i yaparken kullandım.
Parametreleri gerçek zamanlı değiştirmeyi denemek eğlenceli: https://hatch.one/@darrin/sketchy-shapes/edit