nmi.jp Twitter → @tkihira
Welcome to nmi.jp SVGの使い方

Canvasの使い方


2011-05-15
Takuo Kihira

HTML5でCanvasを使うやり方です。

<!DOCTYPE html>
<html><head><title>HTML5でCanvasを使う</title>
<script>
(function() {
    window.onload = function() {
        var canvas = document.getElementById("canvas");
        canvas.width = 500;
        canvas.height = 500;
 
        var ctx = canvas.getContext("2d");
 
        var n = 16;
        var i = 0;
        var j = 1;
        var r = Math.min(canvas.width, canvas.height) / 2;
        var color = "rgb(0,0,0)";
        var random = function(max) {
            return Math.floor(Math.random() * max);
        };
 
        (function drawLine() {
            ctx.beginPath();
            var x1 = Math.cos(i / n * Math.PI * 2 + Math.PI / 2) * r + r;
            var y1 = -Math.sin(i / n * Math.PI * 2 + Math.PI / 2) * r + r;
            ctx.moveTo(x1, y1);
            var x2 = Math.cos(j / n * Math.PI * 2 + Math.PI / 2) * r + r;
            var y2 = -Math.sin(j / n * Math.PI * 2 + Math.PI / 2) * r + r;
            ctx.lineTo(x2, y2);
            ctx.strokeStyle = color;
            ctx.closePath();
            ctx.stroke();
            j++;
            if(j >= n) {
                i++;
                if(i >= n - 1) {
                    color = "rgb(" + random(256) + "," + random(256)
                                + "," + random(256) + ")";
                    i = 0;
                }
                j = i + 1;
            }
            setTimeout(drawLine, 20);
        })();
    };
})();</script></head>
<body><canvas id="canvas" /></body></html>

ただひたすら線を描き続ける、とても簡単なサンプルプログラムです。要点を以下にまとめます。

  • 1行目のDOCTYPEは、これだけでhtml5を指定出来ています。歴史的事情により大文字で書きます。
  • canvasを使うには、<canvas>タグを用意します。普通のHTMLのタグなので、 document.createElement("canvas");

    で作ってもかまいません。</li>

  • 6行目から8行目で、JavaScriptでcanvas要素を取得して大きさを指定しています。
  • Canvasタグに描画を行うには、コンテキストを取得してそこに書き込む必要があります。10行目がその部分で、これで準備は完了です。
  • 12行目~29行目では、drawLine関数で使用する変数や関数を定義しています。関数が実行されるたびに初期化されないように外で宣言します。
  • 21行目~31行目で、実際に描画しています。コンテキストに対してbeginPath、moveTo、lineTo、(closePath)、strokeStyle、で描画する領域を指定し、strokeで実際の線を引きます。
  • 32行目~41行目で、次に引く線のために変数を変化させておき、42行目で50ミリセカンド後に自分自身を呼び出します。
  • </ul>

    実行結果はこちらです。


前の投稿 Welcome to nmi.jp

次の投稿 SVGの使い方