トップページ  > HTML5  > <canvas>タグで図形を描く

★HTML5リファレンス

■<canvas>タグで図形を描く

今までウェブページ上で図形を描くには、 PNGJPEGGIFなどの画像に置き換えるか、 Flash などのプラグインデータを埋め込むのが一般的でした。

HTML5では、2Dのグラフィックスを描く、<canvas>要素が新たに追加されています。 <canvas>を使用することで、標準のHTMLとJavaScriptだけで、 グラフやゲームグラフィックスなどの図形をすばやく表示できるようになります。

HTMLの部分は大変シンプルです。

<canvas id="sample1">
図形を表示するには、canvasタグをサポートしたブラウザが必要です。
</canvas>

■<canvas>をスクリプトと組み合わせる

しかし、これだけでは図形は表示されません。 このHTMLの部分とJavaScriptをID名で関連付けて、描く図形を指定します。 JavaScriptの部分では、描く図形を指定する前に、 まずキャンバスを使うための準備(描画コンテキストの取得)が必要です。

//描画コンテキストの取得
var canvas = document.getElementById('sample1');
var context = canvas.getContext('2d');

上のサンプルの一行目では、getElementByIdというメソッド(操作)を使って、HTML文書内でsample1というID名を指定した要素、つまり、<canvas id="sample1">~</canvas>の部分を参照しています。ちなみに、HTMLの仕様では、一つの文書内で重複して同じID名を付けることはできません。

一行目のgetElementByIdで取得したオブジェクト(対象)には、canvasという名前を付けています。 取得したオブジェクトに名前を付けたのは、そのオブジェクトに対して getContextというメソッドを実行するためです。getContextはキャンバスにアクセスするためのメソッドで、<canvas>を操作する際には必ず一度実行する必要があります。

上のサンプルの二行目では、getContext('2d')でコンテキスト名を指定しています。現在のところ、getContext()メソッドでは'2d'という引数のみがサポートされています。 <canvas>で平面図形を描く際には'2d'を指定します。

さて、上記の2行で描画コンテキストを取得して、図形を描くコードを記述し始めても良いのですが、 <canvas>をサポートしてないブラウザを考慮して、描画コードの部分を if (canvas.getContext){ ~ } で囲んでおきましょう。

//描画コンテキストの取得
var canvas = document.getElementById('sample1');
if (canvas.getContext) {
var context = canvas.getContext('2d');
//ここに四角形・円などの図形を描くコードを記述する
}

ここまでで<canvas>で図形を描く準備ができました。

■四角形・円などの図形を描く

上記をふまえて様々な図形を描いてみましょう。

HTMLソース

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>canvasで図形を描く</title>

<script type="text/javascript">
<!--
function sample() {
//描画コンテキストの取得
var canvas = document.getElementById('sample1');
if (canvas.getContext) {

var context = canvas.getContext('2d');

//左から20上から40の位置に、幅50高さ100の四角形を描く
context.fillRect(20,40,50,100);

//色を指定する
context.strokeStyle = 'rgb(00,00,255)'; //枠線の色は青
context.fillStyle = 'rgb(255,00,00)'; //塗りつぶしの色は赤

//左から200上から80の位置に、幅100高さ50の四角の枠線を描く
context.strokeRect(200,80,100,50);

//左から150上から75の位置に、半径60の半円を反時計回り(左回り)で描く
context.arc(150,75,60,Math.PI*1,Math.PI*2,true);
context.fill();

}
}
//-->
</script>

</head>
<body onLoad="sample()">
<h2>canvasで図形を描く</h2>
<canvas id="sample1" style="background-color:yellow;">
図形を表示するには、canvasタグをサポートしたブラウザが必要です。
</canvas>
</body>
</html>
↓↓↓

ブラウザ上の表示

canvasで図形を描く

図形を表示するには、canvasタグをサポートしたブラウザが必要です。

上のサンプルでは、塗りつぶしの四角形・枠線の四角形(青)・塗りつぶしの半円(赤)を描いています。 図形を描くのに使用したのは、 fillRect()メソッド・ strokeRect()メソッド・ arc()メソッド・ fill()メソッドです。

図形の色を特に指定しない場合には、一般的なブラウザでは黒になりますが、上のサンプルでは、 strokeStyle属性・ fillStyle属性を使用して、枠線の色を青く、塗りつぶしの色を赤く指定しています。 今回は使用しませんでしたが、canvasでは他にも半透明・グラデーション・影・図形や画像の変形などの指定が可能です。

<canvas>要素の幅と高さは、width属性とheight属性で指定することができますが、 特に指定しない場合の初期値は300×150となります。 キャンバスの背景をCSSのbackground-color:yellow;の指定で黄色くしていますが、 これはキャンバスのサイズを分かりやすくするためです。

<canvas>~</canvas>の中には、 <canvas>タグがサポートされていない環境で表示させるメッセージを記述することができます。

■Internet Explorerで<canvas>を使う

<canvas>は、HTML5の仕様の中でも比較的ブラウザのサポートが早い機能の一つです。 すでに、Firefox、Safari、Google Chrome、Operaなどのブラウザでは<canvas>がサポートされています。

Internet Explorer8以前ではサポートされていませんが、 Googleが提供しているexplorercanvasというライブラリを使用すれば、 Internet Explorerでも同じように<canvas>で指定した図形を描くことが可能になります。

explorercanvasの使い方は簡単です。 Googleの配布先でダウンロードしたファイルのうち、 excanvas.jsという名前のファイルを適当なディレクトリにアップロードして、 HTMLファイルの<head>~</head>内に以下のコードを追加して呼び出すだけです。

<!--[if IE]>
<script type="text/javascript" src="sample/excanvas.js"></script>
<![endif]-->

<!--[if IE]>~<![endif]-->で囲むのは、 Internet Explorer以外では必要の無いexcanvas.jsを、他のブラウザで呼び出さないようにするためです。

HTMLソース

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>canvasで図形を描く</title>

<!--[if IE]>
<script type="text/javascript" src="sample/excanvas.js"></script>
<![endif]-->

<script type="text/javascript">
<!--
function sample() {
//描画コンテキストの取得
var canvas = document.getElementById('sample1');
if (canvas.getContext) {

var context = canvas.getContext('2d');

//左から20上から40の位置に、幅50高さ100の四角形を描く
context.fillRect(20,40,50,100);

//色を指定する
context.strokeStyle = 'rgb(00,00,255)'; //枠線の色は青
context.fillStyle = 'rgb(255,00,00)'; //塗りつぶしの色は赤

//左から200上から80の位置に、幅100高さ50の四角の枠線を描く
context.strokeRect(200,80,100,50);

//左から150上から75の位置に、半径60の半円を反時計回り(左回り)で描く
context.arc(150,75,60,Math.PI*1,Math.PI*2,true);
context.fill();

}
}
//-->
</script>

</head>
<body onLoad="sample()">
<h2>canvasで図形を描く</h2>
<canvas id="sample1" style="background-color:yellow;">
図形を表示するには、canvasタグをサポートしたブラウザが必要です。
</canvas>
</body>
</html>

Internet Explorerでexplorercanvasが有る場合と無い場合を比較してみてください。

サンプルを別画面で開く(explorercanvasが有る場合)
サンプルを別画面で開く(explorercanvasが無い場合)

■<canvas>は適切に使う

HTML5の仕様では、より適切な要素がある場合には、<canvas>を使うべきではないとされています。 例えば、ページの見出しに<canvas>を使うのは不適切です。 見出しを装飾する場合には、<h1>などの適切な要素を使用した上でCSSでスタイリングするべきでしょう。

■関連項目

Canvasリファレンス
<canvas> …… 図形を描くHTML5から追加
<前へ 記事一覧へ 次へ>
トップページ  > HTML5  > <canvas>タグで図形を描く
© HTMQ