canvasのコードを見やすくしよう!
明けましておめでとうございます。
本年もどうぞよろしくお願いいたします。
さて、
今年から閃光部(フロントエンド)を離れ
意匠部(デザイン)の所属になるのですが
そうなるとすぐJS忘れちゃいそうで。。。
というわけで忘れないようにブログ始めます!
最初の投稿はcanvasのお話。
canvasで複雑なパスを描こうとすると。。。
(function(win, doc) {
'use strict';
var cvs = doc.createElement('canvas'),
ctx = cvs.getContext('2d');
cvs.width = 200;
cvs.height = 300;
doc.body.appendChild(cvs);
ctx.translate(100, 100);
ctx.beginPath();
ctx.arc(0, 0, 30, 0, Math.PI * 2, true);
ctx.save();
for (var i = 8; i--;) {
ctx.rotate(45 * Math.PI / 180);
ctx.moveTo(0, -50);
ctx.lineTo(0, -80);
}
ctx.restore();
ctx.save();
ctx.translate(-50, 100);
ctx.save();
ctx.translate(0, 0);
ctx.moveTo( 0, 0);
ctx.lineTo(20, 0);
ctx.lineTo(20, 20);
ctx.lineTo( 0, 20);
ctx.lineTo( 0, 40);
ctx.lineTo(20, 40);
ctx.restore();
ctx.save();
ctx.translate(30, 0);
ctx.moveTo( 0, 0);
ctx.lineTo(20, 0);
ctx.lineTo(20, 40);
ctx.lineTo( 0, 40);
ctx.lineTo( 0, 0);
ctx.restore();
ctx.save();
ctx.translate(60, 0);
ctx.moveTo( 0, 10);
ctx.lineTo(10, 0);
ctx.lineTo(10, 40);
ctx.moveTo( 0, 40);
ctx.lineTo(20, 40);
ctx.restore();
ctx.save();
ctx.translate(85, 0);
ctx.moveTo(20, 40);
ctx.lineTo(20, 0);
ctx.lineTo( 0, 30);
ctx.lineTo(25, 30);
ctx.restore();
ctx.restore();
ctx.stroke();
}(this, document));
見づらい(T_T)
でも、これを save() / restore() の対でインデントすると。。。
(function(win, doc) {
'use strict';
var cvs = doc.createElement('canvas'),
ctx = cvs.getContext('2d');
cvs.width = 200;
cvs.height = 300;
doc.body.appendChild(cvs);
ctx.translate(100, 100);
ctx.beginPath();
ctx.arc(0, 0, 30, 0, Math.PI * 2, true);
ctx.save();
for (var i = 8; i--;) {
ctx.rotate(45 * Math.PI / 180);
ctx.moveTo(0, -50);
ctx.lineTo(0, -80);
}
ctx.restore();
ctx.save();
ctx.translate(-50, 100);
ctx.save();
ctx.translate(0, 0);
ctx.moveTo( 0, 0);
ctx.lineTo(20, 0);
ctx.lineTo(20, 20);
ctx.lineTo( 0, 20);
ctx.lineTo( 0, 40);
ctx.lineTo(20, 40);
ctx.restore();
ctx.save();
ctx.translate(30, 0);
ctx.moveTo( 0, 0);
ctx.lineTo(20, 0);
ctx.lineTo(20, 40);
ctx.lineTo( 0, 40);
ctx.lineTo( 0, 0);
ctx.restore();
ctx.save();
ctx.translate(60, 0);
ctx.moveTo( 0, 10);
ctx.lineTo(10, 0);
ctx.lineTo(10, 40);
ctx.moveTo( 0, 40);
ctx.lineTo(20, 40);
ctx.restore();
ctx.save();
ctx.translate(85, 0);
ctx.moveTo(20, 40);
ctx.lineTo(20, 0);
ctx.lineTo( 0, 30);
ctx.lineTo(25, 30);
ctx.restore();
ctx.restore();
ctx.stroke();
}(this, document));
見やすい!
さらに beginPath() と stroke() の対もインデントすると。。。
(function(win, doc) {
'use strict';
var cvs = doc.createElement('canvas'),
ctx = cvs.getContext('2d');
cvs.width = 200;
cvs.height = 300;
doc.body.appendChild(cvs);
ctx.translate(100, 100);
ctx.beginPath();
ctx.arc(0, 0, 30, 0, Math.PI * 2, true);
ctx.save();
for (var i = 8; i--;) {
ctx.rotate(45 * Math.PI / 180);
ctx.moveTo(0, -50);
ctx.lineTo(0, -80);
}
ctx.restore();
ctx.save();
ctx.translate(-50, 100);
ctx.save();
ctx.translate(0, 0);
ctx.moveTo( 0, 0);
ctx.lineTo(20, 0);
ctx.lineTo(20, 20);
ctx.lineTo( 0, 20);
ctx.lineTo( 0, 40);
ctx.lineTo(20, 40);
ctx.restore();
ctx.save();
ctx.translate(30, 0);
ctx.moveTo( 0, 0);
ctx.lineTo(20, 0);
ctx.lineTo(20, 40);
ctx.lineTo( 0, 40);
ctx.lineTo( 0, 0);
ctx.restore();
ctx.save();
ctx.translate(60, 0);
ctx.moveTo( 0, 10);
ctx.lineTo(10, 0);
ctx.lineTo(10, 40);
ctx.moveTo( 0, 40);
ctx.lineTo(20, 40);
ctx.restore();
ctx.save();
ctx.translate(85, 0);
ctx.moveTo(20, 40);
ctx.lineTo(20, 0);
ctx.lineTo( 0, 30);
ctx.lineTo(25, 30);
ctx.restore();
ctx.restore();
ctx.stroke();
}(this, document));
もっと見やすい!!
このお正月、<canvas>でゴニョゴニョする際はぜひお試しください。