連載 :
HTML5の便利なTips100選HTML+JavaScriptだけでブラウザに図形描画 - Canvas API -
2012年6月26日(火)

TIPS 014:直線から連なる円弧を描画する
arcToメソッドを使うことで、直線から連なる円弧を描画できます。
[リスト7]直線から連なる円弧を描画するコード(arcTo.html)
window.addEventListener('DOMContentLoaded',
function() {
if (HTMLCanvasElement) {
var cv = document.querySelector('#cv');
var c = cv.getContext('2d');
c.beginPath();
// 直線から連なる円弧を描画
c.moveTo(100, 250);
c.arcTo(200, 10, 380, 280, 50);
c.stroke();
}
}
);
![]() |
図8:直接から連なる円弧を描画する(クリックで拡大) |
arcToメソッドの構文は、以下のとおりです。それぞれの引数の意味は、図の座標に対応しています。また、x0、y0はarcToメソッドを呼び出す前の最後の座標を表すものとします(サンプルではmoveToメソッドで指定された座標です)。
[構文]arcToメソッド
- arcTo(x1, y1, x2, y2, r)
実際に描画されるのは、図の黒い線の部分です。座標(x2, y2)が終点となるわけではない点に注意してください。
TIPS 015:線のスタイルを設定する
Canvas APIでは、線の色、太さ、先端の形状などを指定できます。
[リスト8]線のスタイルを指定するコード(lineStyle.html)
window.addEventListener('DOMContentLoaded',
function() {
if (HTMLCanvasElement) {
var cv = document.querySelector('#cv');
var c = cv.getContext('2d');
c.strokeStyle = 'Blue'; // 線の色
c.lineWidth = 10; // 線の太さ
// 標準の先端(左端)
c.beginPath();
c.lineCap = 'butt';
c.moveTo(30, 30);
c.lineTo(30, 280);
c.stroke();
// 丸めた先端(中央)
c.beginPath();
c.lineCap = 'round';
c.moveTo(150, 30);
c.lineTo(150, 280);
c.stroke();
// 四角の先端(右端)
c.beginPath();
c.lineCap = 'square';
c.moveTo(270, 30);
c.lineTo(270, 280);
c.stroke();
}
}
);
![]() |
図9:先端の異なる3本の直線が描画された(クリックで拡大) |
線スタイルに関わるプロパティには、以下のようなものがあります。
表2:線スタイルに関わるプロパティ
| プロパティ | 概要 | |
|---|---|---|
| strokeStyle | 線の色 | |
| lineWidth | 線の幅 | |
| lineCap | 先端のスタイル(設定値は以下) | |
| 設定値 | 概要 | |
| butt | 既定のスタイル | |
| round | 先端を丸める | |
| square | 先端を四角くする | |
lineCapプロパティのbuttとsquareはよく似ていますが、squareの方が角を加工している分、やや長めになります。
TIPS 016:角の形状を設定する
折れ線を描画する場合、その角のスタイルを指定することもできます。
[リスト9]角の形状を変更したコード(miter.html)
window.addEventListener('DOMContentLoaded',
function() {
if (HTMLCanvasElement) {
var cv = document.querySelector('#cv');
var c = cv.getContext('2d');
c.lineWidth = 10;
// 鋭角を設定(左端)
c.beginPath();
c.lineJoin = 'miter';
c.miterLimit = 4;
c.moveTo(60, 85);
c.lineTo(100, 220);
c.lineTo(140, 85);
c.stroke();
// 平たい角を設定(中央)
c.beginPath();
c.lineJoin = 'bevel';
c.moveTo(160, 85);
c.lineTo(210, 220);
c.lineTo(240, 85);
c.stroke();
// 丸めた角を設定(右端)
c.beginPath();
c.lineJoin = 'round';
c.moveTo(260, 85);
c.lineTo(300, 220);
c.lineTo(340, 85);
c.stroke();
}
}
);
![]() |
図10:先端の異なる折れ線を表示(クリックで拡大) |
角の形状に関わるプロパティには、以下のようなものがあります。
表3:角の形状に関わるプロパティ
| プロパティ | 概要 | |
|---|---|---|
| lineJoin | 先端のスタイル | |
| 設定値 | 概要 | |
| miter | 鋭角(デフォルト) | |
| bevel | 角を平たく | |
| round | 角を丸める | |
| miterLimit | 鋭角の度合い | |
miterLimitプロパティは、lineJoinプロパティがmiterの場合のみ有効です。数値が大きい程、鋭くなります。
TIPS 017:図形を塗りつぶす
fillメソッドを利用することで、パスで囲まれた領域を塗りつぶすこともできます。
[リスト10]多角形を塗りつぶすためのコード(fill.html)
window.addEventListener('DOMContentLoaded',
function() {
if (HTMLCanvasElement) {
var cv = document.querySelector('#cv');
var c = cv.getContext('2d');
c.beginPath();
c.moveTo(15, 15);
c.lineTo(30, 250);
c.lineTo(250, 200);
c.lineTo(280, 130);
c.lineTo(250, 80);
c.closePath();
// 塗りつぶしスタイルを設定
c.fillStyle = 'Red';
c.globalAlpha = 0.5;
// パスに沿って塗りつぶし
c.fill();
// c.stroke();
}
}
);
![]() |
図11:多角形が赤く塗りつぶされた(クリックで拡大) |
塗りつぶしスタイルは、以下のプロパティで指定できます((1)の部分)。
表4:塗りつぶしに関わるプロパティ
| プロパティ | 概要 |
|---|---|
| fillStyle | 塗りつぶし色 |
| globalAlpha | 不透明度(0~1。0:透明、1:不透明) |
スタイルを設定できたら、あとはfillメソッドで塗りつぶすだけです。サンプルでは赤、半透明(0.5)で多角形を塗りつぶしています。
もしも図形に枠線を付けたいならば、fillメソッドと合わせて、strokeメソッドを呼び出すこともできます(*)。以下は、18行目のコードをコメントインした場合の結果です。
![]() |
図12:塗りつぶされた図形に枠線が付いた(クリックで拡大) |
(*)もちろん、TIPS 015、TIPS 016で紹介したような線スタイルを合わせて指定しても構いません。
Canvas APIを使った複数のHTMLサンプル
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。
全文検索エンジンによるおすすめ記事
- HTML+JavaScriptだけでブラウザに図形描画(2)- Canvas API-
- 動画・音声のブラウザ対応状況、canvasによる描画
- HTML+JavaScriptだけでブラウザに図形描画(3)- Canvas API-
- 簡単な図を描いてみよう!
- HTML 5+JavaScriptでCanvasアプリを作る
- JavaScriptを使って描画するCanvasとは?
- 「TAURI」で「丸アートお絵描き」アプリを作ろう
- 「Krita」と「Python」で「ベジェ曲線」を描いてみよう
- デスクトップアプリライクな操作性を実現するドラッグ&ドロップAPI
- JavaScriptでローカルファイルを自在に操る- File API







