Canvas
HTML5では新要素としてCanvas要素が追加されました。この要素はグラフィックを描画する領域を示すことができ、実際に描画するにはJavaScriptを用います。Canvasは自由度が高く、横スクロールシューティングゲーム(JS-WARS)や、3D空間を移動するゲーム(3D Walker)などに応用されていたりもします。
右の図をご覧になると分かる通り、Canvas描画されるグラフィックは、左上を(0, 0)とした座標系で描画されます。またこの図自体もCanvas要素を用いて描画されています。
図のソースコードは、下のボタンを押すと表示されます。
// 各変数の定義と値の代入 var origin_x = 40; // 原点 var origin_y = 40; var graph_w = 260; // 各座標軸 var graph_h = 260; var rect_x = 100; // 四角形の座標、大きさ var rect_y = 100; var rect_w = 100; var rect_h = 100; // 座標を囲む灰色の線の描画 cx.beginPath(); cx.strokeStyle = 'rgb(178, 178, 178)'; cx.moveTo(graph_w, origin_y); cx.lineTo(graph_w, graph_h); cx.lineTo(origin_x, graph_h); cx.stroke(); // 緑色の四角形の描画 cx.beginPath(); cx.rect(rect_x, rect_y, rect_w, rect_h); cx.fillStyle = "rgb(100, 230, 100)"; cx.fill(); // 各種スタイルの初期化 cx.strokeStyle = "rgb(0, 0, 0)"; cx.fillStyle = "rgb(0, 0, 0)"; cx.font = "bold 15px 'MS Pゴシック'"; cx.fillText("0", origin_x - 10, origin_y - 3); // x軸の描画 cx.beginPath(); cx.moveTo(origin_x, origin_y); cx.lineTo(graph_w, origin_y); cx.lineTo(graph_w - 10, origin_y - 5); cx.moveTo(graph_w, origin_y); cx.lineTo(graph_w - 10, origin_y + 5); cx.fillText("X", graph_w + 5, origin_y); cx.stroke() // y軸の描画 cx.beginPath(); cx.moveTo(origin_x, origin_y); cx.lineTo(origin_x, graph_h); cx.lineTo(origin_x + 5, graph_h - 10); cx.moveTo(origin_x, graph_h); cx.lineTo(origin_x - 5, graph_h - 10); cx.fillText("Y", origin_x - 10, graph_h + 15); cx.stroke(); // スタイルの初期化(青色) cx.strokeStyle = "rgb(100, 100, 256)"; cx.fillStyle = "rgb(100, 100, 256)"; // 四角形のx座標を示す、青い線 cx.beginPath(); cx.moveTo(origin_x, rect_y); cx.lineTo(rect_x, rect_y); cx.lineTo(rect_x - 10, rect_y + 6); cx.moveTo(rect_x, rect_y); cx.lineTo(rect_x - 10, rect_y - 6); cx.fillText("x", (rect_x - origin_x)/2 + origin_x, rect_y + 15); cx.stroke(); // 四角形のy座標を示す、青い線 cx.beginPath(); cx.moveTo(rect_x, origin_y); cx.lineTo(rect_x, rect_y); cx.lineTo(rect_x + 5, rect_y - 10); cx.moveTo(rect_x, rect_y); cx.lineTo(rect_x - 5, rect_y - 10); cx.fillText("y", rect_x + 10, (rect_y - origin_y)/2 + origin_y); cx.stroke(); // スタイルの初期化(赤色) cx.strokeStyle = "rgb(256, 100, 100)"; cx.fillStyle = "rgb(256, 100, 100)"; // 緑の四角形の横幅を示す、赤い線 cx.beginPath(); cx.moveTo(rect_x, rect_y); cx.lineTo(rect_x + rect_w, rect_y); cx.lineTo(rect_x + rect_w - 10, rect_y - 5); cx.moveTo(rect_x + rect_w, rect_y); cx.lineTo(rect_x + rect_w - 10, rect_y + 5); cx.fillText("w", rect_w/2 + rect_x, rect_y - 5); cx.stroke(); // 緑の四角形の縦幅を示す、赤い線 cx.beginPath(); cx.moveTo(rect_x, rect_y); cx.lineTo(rect_x, rect_y + rect_h); cx.lineTo(rect_x + 5, rect_y + rect_h - 10); cx.moveTo(rect_x, rect_y + rect_h); cx.lineTo(rect_x - 5, rect_y + rect_h - 10); cx.fillText("h", rect_x - 15, rect_h/2 + rect_y); cx.stroke();
注意事項
各ページではCanvas要素のDOMオブジェクトの取得及び、描画コンテキストを取得するコードは省略してあります。またonloadでの読み込みも省略してありますので、注意して下さい。JavaScriptに書き込むべきこれらのコードは以下の通りで、ここではcxという変数が描画コンテキストを表わします。
onload = function() { draw(); }; function draw() { // Canvas要素のDOMオブジェクトの取得 var canvas = document.getElementById("rect"); // 描画コンテキストの取得 var cx = canvas.getContext("2d"); // 四角形の描画 cx.beginPath(); cx.rect(10, 10, 50, 50); cx.stroke(); }
また、これに対してHTMLソースにおけるCanvas要素は以下の通りになります。