Skip to content

rubythonode/brushjs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

13 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Brushjs

๋‘˜๋Ÿฌ๋ณด๊ธฐ

Brushjs Gallery

์‹œ์ž‘ํ•˜๊ธฐ

Brushjs๋Š” HTML5์˜ canvas ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ํ†ตํ•ด 2D๊ทธ๋ž˜ํ”ฝ ์ž‘์—…์„ ์ˆ˜์›”ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค.

์„ค๋ช…

1. ์ขŒํ‘œ๊ณ„

๊ธฐ๋ณธ์ ์œผ๋กœ canvas์—˜๋ฆฌ๋จผํŠธ์˜ ์ขŒํ‘œ๊ณ„๋Š” ์‹ค๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ์ดํ•ดํ•˜๋Š” ์ขŒํ‘œ๊ณ„์™€๋Š” ๋‹ค๋ฅธ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ณต์žกํ•œ ๊ทธ๋ž˜ํ”ฝ ์ž‘์—…์„ ํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ์ง๊ด€์ ์ด์ง€ ์•Š์€ ํ˜•ํƒœ์ด๊ธฐ์— ์ด๋ฅผ ์šฐ๋ฆฌ๊ธฐ ์ดํ•ด๊ฐ€๊ธฐ ์‰ฌ์šด ํ˜•ํƒœ๋กœ Brushjs๋Š” ๋‚ด๋ถ€์—์„œ ๋งž์ถฐ์ฃผ๋Š” ์ž‘์—…์„ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด HTML5 Canvas ์ขŒํ‘œ๊ณ„

Brushjs๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ขŒํ‘œ๊ณ„

2. ๋™์ž‘๋ฐฉ์‹

Brushjs๋„ canvas๋ผ๋Š” ํ•˜๋‚˜์˜ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ๊ฐ์˜ ๊ทธ๋ž˜ํ”ฝ ์š”์†Œ๋“ค์„ ๊ณ ์œ ํ•œ id๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ด€๋ฆฌ ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋งˆ์น˜ DOM ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋‹ค์–‘ํ•œ ๊ทธ๋ž˜ํ”ฝ ํšจ๊ณผ๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ์‚ฌ์šฉ๋ฒ•

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title></title>
</head>
<body>
<canvas id="canvas" width="600" height="300"></canvas>

<script type="text/javascript" src="Brush.js"></script>
<script type="text/javascript">
var canvas = new Brush('canvas');

// Your code

</script>
</body>
</html>

#### - ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ
##### set(element_info) set ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ์ •๋ณด๋Š” new ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์— ๋ ˆ์ด์–ด ์ •๋ณด๋กœ ์ถ”๊ฐ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ```javascript var circle = { ... info } canvas.set(circle)
<br/>
##### draw()
set์„ ํ†ตํ•ด ์ €์žฅ๋œ ๋ ˆ์ด์–ด๋ฅผ canvas์ƒ์— ๊ทธ๋ฆฌ๋Š” ์—ญํ™œ์„ ํ•ฉ๋‹ˆ๋‹ค. draw ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „์—๋Š” set์œผ๋กœ ์ €์žฅํ•œ ๋ ˆ์ด์–ด๋ฅผ ๊ทธ๋ฆฌ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.
```javascript

canvas.draw()


##### get(layer_id) get ๋ฉ”์„œ๋“œ๋Š” set์„ ํ†ตํ•ด ์ €์žฅ๋œ ๋ ˆ์ด์–ด์˜ ๊ณ ์œ  ์•„์ด๋””๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด๋‹น ๋ ˆ์ด์–ด ์ •๋ณด๋ฅผ ์ „๋‹ฌ๋ฐ›์Šต๋‹ˆ๋‹ค. ```javascript

canvas.get(id)

<br/>
##### getLayers()
getLayers ๋ฉ”์„œ๋“œ๋Š” set์„ ํ†ตํ•ด ์ €์žฅ๋œ ์ „์ฒด ๋ ˆ์ด์–ด ์ •๋ณด๋ฅผ ์ „๋‹ฌ๋ฐ›์Šต๋‹ˆ๋‹ค.
```javascript

canvas.getLayers()

##### delete(layer_id) delete ๋ฉ”์„œ๋“œ๋Š” set์„ ํ†ตํ•ด ์ €์žฅ๋œ ๋ ˆ์ด์–ด ์ •๋ณด๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ```javascript

canvas.delete(id)

<br/>
##### clear()
clear ๋ฉ”์„œ๋“œ๋Š” ํ•ด๋‹น canvas ์˜์—ญ์„ ๋ชจ๋‘ ์ง€์›๋‹ˆ๋‹ค.
```javascript

canvas.clear()



- ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฉ”์„œ๋“œ


##### animate(elements_info) animate ๋ฉ”์„œ๋“œ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ์ค„ ๋ ˆ์ด์–ด ์ •๋ณด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ```javascript var moving = { // moving animation } canvas.animate(moving)
<br/>
##### deleteAnimation(layer_id)
deleteAnimation ๋ฉ”์„œ๋“œ๋Š” animate ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋“ฑ๋ก๋œ ์—๋‹ˆ๋ฉ”์ด์…˜ ์ •๋ณด๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
```javascript

canvas.deleteAnimation(id)


##### start() animate ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋“ฑ๋ก๋œ ์—๋‹ˆ๋ฉ”์ด์…˜ ์ •๋ณด๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ```javascript

canvas.start()


<br/><br/>
#### - ์ด๋ฒคํŠธ ๋ฉ”์„œ๋“œ
<br/>
##### click(callback)
ํด๋ฆญ์‹œ ํ•„์š”ํ•œ ํ–‰๋™์„ callback ํ•จ์ˆ˜๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
```javascript
var callbackFn = function(){
  //....
}

canvas.click(callbackFn)


##### mousemove(callback) canvas ์ƒ์—์„œ ๋งˆ์šฐ์Šค๋ฅผ ์ด๋™ ์‹œํ‚ฌ๋•Œ ํ•„์š”ํ•œ ํ–‰๋™์„ callback ํ•จ์ˆ˜๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ```javascript var callbackFn = function(){ //.... }

canvas.mousemove(callbackFn)



<br/><br/>
### 4.๊ธฐ๋ณธ ๊ทธ๋ž˜ํ”ฝ (Non-Animation)

<br/>
#### Line
-

```javascript
var line = {
  id : ๊ณ ์œ ํ•œ ID ๊ฐ’(string),
  type: 'line',
  points : [
    [x0, y0], // ํ•„์ˆ˜ [int, int]
    [x1, y1], // ํ•„์ˆ˜ [int, int]
    ...
    [xn, yn]
  ],
  lineWidth : ๋ผ์ธ ๋‘๊ป˜(string),
  strokeStyle : ๋ผ์ธ ์นผ๋Ÿฌ(string),
  lineCap : ๋ผ์ธ์˜ ๋ ๋งˆ๋ฌด๋ฆฌ ํ˜•ํƒœ,
  lineJoin : ๋ผ์ธ๊ฐ„์˜ ์—ฐ๊ฒฐ ํ˜•ํƒœ, //miter , round, bevel
  isClose : ๋์ ๊ณผ ์‹œ์ž‘์  ์—ฐ๊ฒฐ ์œ ๋ฌด (bool),
  isFill : isClose ๊ฐ€ true์ธ ๊ฒฝ์šฐ์— ๋‚ด๋ถ€ ์ƒ‰ ์ฑ„์›€ (bool),
  fillStyle : isFill ์ด true์ธ ๊ฒฝ์šฐ ๋‚ด๋ถ€ ์ƒ‰ (string),
  opacity : ํˆฌ๋ช…๋„ (0 < opacity < 1)
};


#### ์˜ˆ์ œ ```javascript var line = { id : 'line1', type: 'line', from : [0, 100], points : [ [100, 200], [200, 180], [300, 300], [400, 200], [600, 0] ], lineWidth : 1, strokeStyle : 'gray', lineCap : 'round', lineJoin : 'round', isClose : false, isFill : false, fillStyle : 'green', opacity : 0.5 } canvas.set([ line ]).draw(); ```
#### MutiLine -
var MutiLine = {
  id : ๊ณ ์œ ํ•œ ID ๊ฐ’(string),
   type: 'mutiLine',
  type: 'line',
  points : [
    [x0, y0], // ํ•„์ˆ˜ [int, int]
    [x1, y1], // ํ•„์ˆ˜ [int, int]
    ...
    [xn, yn]
  ],
  lineWidth : ๋ผ์ธ ๋‘๊ป˜(string),
  strokeStyle : ๋ผ์ธ ์นผ๋Ÿฌ(string),
  lineCap : ๋ผ์ธ์˜ ๋ ๋งˆ๋ฌด๋ฆฌ ํ˜•ํƒœ,
  lineJoin : ๋ผ์ธ๊ฐ„์˜ ์—ฐ๊ฒฐ ํ˜•ํƒœ, //miter , round, bevel
  isClose : ๋์ ๊ณผ ์‹œ์ž‘์  ์—ฐ๊ฒฐ ์œ ๋ฌด (bool),
  isFill : isClose ๊ฐ€ true์ธ ๊ฒฝ์šฐ์— ๋‚ด๋ถ€ ์ƒ‰ ์ฑ„์›€ (bool),
  fillStyle : isFill ์ด true์ธ ๊ฒฝ์šฐ ๋‚ด๋ถ€ ์ƒ‰ (string),
  opacity : ํˆฌ๋ช…๋„ (0 < opacity < 1)
};

#### ์˜ˆ์ œ ```javascript var multiLine = { id: 'multiLine', type: 'mutiLine', from: [0, 100], lines : [ { type : 'line', points: [ [10, 100] ] }, { type : 'quadraticCurve', points : [ [110, 118, 210, 100] ] }, { type : 'line', points: [ [230, 100] ] }, { type : 'quadraticCurve', points : [ [330, 118, 430, 100] ] }, { type : 'line', points: [ [430, 120], [0 ,120] ] },

], lineWidth : 3, strokeStyle : '#000', lineCap : 'round', lineJoin : 'round', isFill : false, fillStyle: 'red' } canvas.set([ multiLine ]).draw();


<br/>
#### Circle

-
```javascript
var circle = {
  id : ๊ณ ์œ ํ•œ ID ๊ฐ’(string),
  type: 'circle',
  points : [
      [x1 , y1 , radius1],
      ...
      [x , y , radius]
  ]
  startAngle : ์‹œ์ž‘ ๊ฐ (int),
  endAngle : ์ข…๋ฃŒ ๊ฐ (int),
  radius : ๋ฐ˜์ง€๋ฆ„(int),
  lineWidth : ๋ผ์ธ ๋‘๊ป˜(string),
  strokeStyle : ๋ผ์ธ ์นผ๋Ÿฌ(string),
  isFill : ๋‚ด๋ถ€ ์ƒ‰ ์ฑ„์›€(bool),
  fillStyle : isFill์ด  true์ธ ๊ฒฝ์šฐ ๋‚ด๋ถ€ ์ƒ‰(string),
  opacity : ํˆฌ๋ช…๋„ (0 < opacity < 1)
}

#### ์˜ˆ์ œ ```javascript var circle = { id : 'ball1', type: 'circle', points : [ [100, 100 , 20] ], startAngle : 0, endAngle : Math.PI*2, radius : 20, lineWidth : 1, strokeStyle : 'red', isFill : true, fillStyle : 'red' } canvas.set([ circle ]).draw(); ```
#### Rectangle - ```javascript var rectangle ={ id : ๊ณ ์œ ํ•œ ID ๊ฐ’(string), type: 'rectangle', points : [ [x1, y1, width1, height1], ... [x, y, width, height] ], lineWidth : ๋ผ์ธ ๋‘๊ป˜(string), strokeStyle : ๋ผ์ธ ์นผ๋Ÿฌ(string), isFill : ๋‚ด๋ถ€ ์ƒ‰ ์ฑ„์›€(bool), fillStyle : isFill์ด true์ธ ๊ฒฝ์šฐ ๋‚ด๋ถ€ ์ƒ‰(string), opacity : ํˆฌ๋ช…๋„ (0 < opacity < 1) } ```
#### ์˜ˆ์ œ ```javascript var rectangle = { id: 'rectangle', type: 'rectangle', points : [ [50, 50, 100, 100] ], isFill : true, fillStyle : 'red', lineWidth : 1, strokeStyle : 'gray', opacity : 1, fillStyle : 'red' } canvas.set([ rectangle ]).draw(); ```
#### Text -
var text = {
  id : ๊ณ ์œ ํ•œ ID ๊ฐ’(string),
  type: 'text',
  points : [
  [x , y],
  ...
  ],
  text : ํ…์ŠคํŠธ (string),
  font : ํฐํŠธ ์†์„ฑ (string),
  textAlign : ํ…์ŠคํŠธ ์ •๋ ฌ,
  textBaseline : ํ…์ŠคํŠธ ๋ฒ ์ด์Šค ๋ผ์ธ ํ˜•ํƒœ,
  fillStyle : ํฐํŠธ ์ƒ‰ (string),
  lineWidth : ํฐํŠธ ๋ผ์ธ ๋‘๊นจ(string),
  strokeStyle : ํฐํŠธ ๋ผ์ธ ์ƒ‰ (string),
  opacity : ํˆฌ๋ช…๋„ (0 < opacity < 1)
}

#### ์˜ˆ์ œ
var text ={
  id : 'text1',
  type: 'text',
  font : '38pt Arial',
  fillStyle : 'yellow',
  lineWidth : 1,
  //strokeStyle : 'blue',
  text : 'Hello World',
  textAlign : 'center',
  textBaseline : 'middle',
  points : [
    [200 , 50],
    [300 , 150]
  ]
}
canvas.set([
  text
]).draw();

#### Cubic Bรฉzier curve(BezierCurve) -
var bezierCurve = {
  id : ๊ณ ์œ ํ•œ ID ๊ฐ’(string),
  type: 'bezierCurve',
  from : [x, y], // ์‹œ์ž‘์  (int)
  points : [
    [controlePointX1, controlePointY1, controlePointX2, controlePointY2, endPointX1, endPointY2]
    ...
  ],
  lineWidth : ํฐํŠธ ๋ผ์ธ ๋‘๊นจ(string),
  strokeStyle : ํฐํŠธ ๋ผ์ธ ์ƒ‰ (string),
  isClose : ๋์ ๊ณผ ์‹œ์ž‘์  ์—ฐ๊ฒฐ ์œ ๋ฌด (bool),
  isFill : isClose ๊ฐ€ true์ธ ๊ฒฝ์šฐ์— ๋‚ด๋ถ€ ์ƒ‰ ์ฑ„์›€ (bool),
  fillStyle : isFill ์ด true์ธ ๊ฒฝ์šฐ ๋‚ด๋ถ€ ์ƒ‰ (string),
  opacity : ํˆฌ๋ช…๋„ (0 < opacity < 1)
}

#### ์˜ˆ์ œ ![BezierCurve](http://www.w3schools.com/tags/img_beziercurve.gif)
var bezierCurve ={
  id : 'bazier1',
  type: 'bezierCurve',
  from : [20, 20],
  points : [
    [20,100,200,100,200,20]
  ],
  lineWidth : 3,
  strokeStyle : 'green',
  isClose : false,
  isFill : false,
  fillStyle : 'red'
}
canvas.set([
  bezierCurve
]).draw();

#### Quadratic Bรฉzier curve(QuadraticCurve) -
var quadraticCurve ={
  id : 'quadratic',
  type: 'quadraticCurve',
  from : [x, y], // ์‹œ์ž‘์  (int)
  points : [
    [controlePointX1, controlePointY1, endPointX1, endPointY1]
  ],
  lineWidth : ํฐํŠธ ๋ผ์ธ ๋‘๊นจ(string),
  strokeStyle : ํฐํŠธ ๋ผ์ธ ์ƒ‰ (string),
  lineCap : ๋ผ์ธ์˜ ๋ ๋งˆ๋ฌด๋ฆฌ ํ˜•ํƒœ,
  isFill : isClose ๊ฐ€ true์ธ ๊ฒฝ์šฐ์— ๋‚ด๋ถ€ ์ƒ‰ ์ฑ„์›€ (bool),
  opacity : ํˆฌ๋ช…๋„ (0 < opacity < 1)
}

####์˜ˆ์ œ

QuadraticCurve

var quadraticCurve ={
  id : 'quadratic',
  type: 'quadraticCurve',
  from : [20, 20],
  points : [
    [20, 100, 200, 20]
  ],
  lineWidth : 10,
  strokeStyle : 'blue',
  lineCap : 'square',
  isClose : false
}
canvas.set([
  quadraticCurve
]).draw();

ArcTo

arcTo

var arcTo = {
  id : ๊ณ ์œ ํ•œ ID ๊ฐ’(string),
  type: 'arcTo',
  from : [x, y], // ์‹œ์ž‘์  (int)
  points : [
    [x1, y1 ,x2, y2, radius]
  ],
  lineWidth : ๋ผ์ธ ๋‘๊ป˜(string),
  strokeStyle : ๋ผ์ธ ์นผ๋Ÿฌ(string),
  lineCap : ๋ผ์ธ์˜ ๋ ๋งˆ๋ฌด๋ฆฌ ํ˜•ํƒœ,
  lineJoin : ๋ผ์ธ๊ฐ„์˜ ์—ฐ๊ฒฐ ํ˜•ํƒœ, //miter , round, bevel
  isClose : ๋์ ๊ณผ ์‹œ์ž‘์  ์—ฐ๊ฒฐ ์œ ๋ฌด (bool),
  isFill : isClose ๊ฐ€ true์ธ ๊ฒฝ์šฐ์— ๋‚ด๋ถ€ ์ƒ‰ ์ฑ„์›€ (bool),
  fillStyle : isFill ์ด true์ธ ๊ฒฝ์šฐ ๋‚ด๋ถ€ ์ƒ‰ (string),
  opacity : ํˆฌ๋ช…๋„ (0 < opacity < 1)
}

์˜ˆ์ œ

var arcTo = {
  id : 'arc2',
  type: 'arcTo',
  from : [300, 200],
  points : [
    [350, 200 ,350, 250, 50]
  ],
  lineWidth : 2,
  strokeStyle : 'black',
  lineCap : 'round',
  lineJoin : 'round', //miter , round, bevel
  isClose : false,
  isFill : false
}
canvas.set([
  arcTo
]).draw();




5.์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ทธ๋ž˜ํ”ฝ (Animation)

canvas.animate([
  {
    id: '๊ณ ์œ ํ•œ ID ๊ฐ’(string),
    type: 'stroking', // moving
    speed: 1, // how fast
    time: 1 // how many
  }
]);

#### Stroking -
var stroke =
    {
      id : 'stroke1',
      type: 'stroke',
      points : [
        [0, 100],
        [100, 200],
        [200, 180],
        [300, 300],
        [400, 200],
        [600, 0]
      ],
      lineWidth : 1,
      strokeStyle : '#000',
      lineCap : 'round',
      lineJoin : 'round'
    }
canvas.set([
  stroke
]).draw().animate([
  {
    id: 'stroke1',
    type: 'stroking',
    speed: 1,
    time: 1
  }
]).start();

#### Moving -
var multiLine = {
  id: 'multiLine',
  type: 'mutiLine',
  from:  [0, 100],
  lines : [
    {
      type : 'line',
      points: [
        [10, 100]
        ]
    },
    {
      type : 'quadraticCurve',
      points : [
        [110, 118, 210, 100]
      ]
    },
    {
      type : 'line',
      points: [
        [230, 100]
        ]
    }
  ],
  lineWidth : 3,
  strokeStyle : '#000',
  lineCap : 'round',
  lineJoin : 'round',
  isFill : false,
  fillStyle: 'red'
}
canvas.set([
  multiLine
]).draw();

var circle = {
  id : 'ball1',
  type: 'circle',
  points : [
      [100, 100 , 20]
  ],
  startAngle : 0,
  endAngle : Math.PI*2,
  radius : 20,
  lineWidth : 1,
  strokeStyle : 'red',
  isFill : true,
  fillStyle : 'red'
}
canvas.set([
  circle,
  multiLine

]).draw().animate([
  {
    id: 'ball1',
    type: 'moving',
    moveTo : [200, 200],
    speed: 1,
    time: 2
  },
 {
    id: 'multiLine',
    type: 'moving',
    moveTo : [200, 200],
    speed: 1,
    time: 2
  }
]).start();




6.์ด๋ฒคํŠธ


#### Click ```javascript var circle = { id : 'ball1', type: 'circle', points : [ [100, 100 , 20] ], startAngle : 0, endAngle : Math.PI*2, radius : 20, lineWidth : 1, strokeStyle : 'red', isFill : true, fillStyle : 'red' }

var clickEvent = function(self , position){ canvas.get('ball1').points.forEach(function(elem){ elem[0] = position.x; elem[1] = position.y; self.draw() }) } canvas.set([ circle ]).draw().click(clickEvent);


<br/>
#### Mousemove

```javascript
var circle = {
  id : 'ball1',
  type: 'circle',
  points : [
      [100, 100 , 20]
  ],
  startAngle : 0,
  endAngle : Math.PI*2,
  radius : 20,
  lineWidth : 1,
  strokeStyle : 'red',
  isFill : true,
  fillStyle : 'red'
}



var clickEvent = function(self , position){
  canvas.get('ball1').points.forEach(function(elem){
    elem[0] = position.x;
    elem[1] = position.y;
    self.draw()
  })
}
canvas.set([
  circle
]).draw().mousemove(clickEvent);

What Next

  1. Rectangle (updated 2016.07.13)
  2. Gradient(effect) (updated 2016.07.15)
  3. Shadow(effect) (updated 2016.07.15)
  4. globalCompositeOperation (updated 2016.07.19)
  5. Scale(animation)
  6. Rotate(animation)
  7. moving to specific points (animation) (updated 2016.09.01)
  8. Image
  9. Performance
  10. Document in English
  11. Brushjs Gallery (updating)

About

Brushjs is 2d graphic library for HTML5's canvas element.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published