四角を描く – rect要素

SVG で四角を描くには rect 要素を使用します。

rect要素:書き方

四角の左上の座標を x y 属性で指定し、width height 属性で大きさを指定します。四角の色は fill 属性で指定します。

<svg width="600" height="200">
    <rect x="50" y="50" width="500" height="100" fill="#F46860"/>
</svg>

ブラウザでの表示

rect 要素で四角をえがく

四角を線で囲む

四角を塗りつぶさずに線で囲むには、fill 属性を none にし stroke 属性でライン色を指定します。stroke-dasharray や stroke-linecap 属性を合わせて指定擂れば破線にしたりドットにしたりできます。

<svg width="600" height="500">
<!-- 四角を線で囲む -->
    <rect x="50" y="50" width="500" height="100" fill="none" stroke="#F46860" stroke-width="5" />
    
<!-- 四角を破線で囲む -->    
    <rect x="50" y="200" width="500" height="100" fill="none" stroke="#F46860" stroke-width="5" stroke-dasharray="20,7" />
    
<!-- 四角をドットの線で囲む -->
    <rect x="50" y="350" width="500" height="100" fill="none" stroke="#F46860" stroke-width="5" stroke-dasharray="2,15" stroke-linecap="round" />
</svg>

ブラウザでの表示

stroke 属性を指定
stroke 属性を指定したブラウザでの表示

stroke-dasharray=”20,7″ を指定
stroke-dasharray=

stroke-linecap=”round” を指定
stroke-linecap=

一つの svg タグに複数の四角を重ねる

一つの svg タグに複数の四角を重ねて配値すると、後から記述した rect 要素が上に重なります。これは他の svg 要素でも同じです。

<svg width="600" height="230">
<!-- ピンク -->
    <rect x="50" y="50" width="280" height="100" fill="#F47197"/>
<!-- 黄色 -->
    <rect x="250" y="100" width="100" height="100" fill="#FDA93B"/>
<!-- グレー -->
    <rect x="320" y="70" width="150" height="100" fill="#ECEEF1"/>
<!-- 青 -->
    <rect x="430" y="50" width="150" height="100" fill="#39A9F2"/>
</svg>

ブラウザでの表示

一つの svg タグに複数の四角を重ねて描いたブラウザでの表示

塗りの透明度を変える

四角内の塗りの透明度を変えるには fill-opacity 属性を指定します。

<svg width="600" height="200">
    <rect x="50" y="50" width="500" height="100" fill="#F46860" fill-opacity="0.5" />
</svg>

ブラウザでの表示

塗りの透明度を変えたブラウザでの表示

角が丸い四角にする

角を丸くするには rx 属性と ry 属性を使用します。rx 属性には横幅の半径、ry 属性には縦幅の半径を指定します。stroke を付けた場合は stroke がつぶれる感じになります。

<svg width="600" height="350">
<!-- 角丸 -->
    <rect x="50" y="50" width="500" height="100" fill="#1FCEB4" rx="15" ry="15" />

<!-- 線がある角丸 -->    
    <rect x="50" y="200" width="500" height="100" fill="#1FCEB4" stroke="#ccc" stroke-width="10" rx="15" ry="15" />
</svg>

ブラウザでの表示

角丸
角が丸い四角にしたブラウザでの表示

線がある角丸
角が丸い四角にわく線をつけたブラウザでの表示

線を描く – line要素

インライン SVG で線を描くには line要素を使用します。

line要素:書き方

x1 x2 属性で横座標の始まりと終わりの位置を指定します。y1 y2 属性で縦座標の始まりと終わりの位置を指定します。線の色は stroke 属性で設定します。線の太さは stroke-width 属性でピクセル値又は em cm などの単位を指定します。

<svg width="500" height="200">
    <line x1="50" y1="50" x2="450" y2="50" stroke="black" stroke-width="1px" />
</svg>

ブラウザでの表示

lineの基本的な書き方のブラウザでの表示

線の端を加工する

線の端の形状は stroke-linecap 属性で指定します。デフォルトは butt 値となっています。
丸は round、四角は square を指定します。

<svg width="600" height="200">
<!--デフォルト stroke-linecap="butt" -->
    <line x1="50" y1="50" x2="550" y2="50" stroke="#ccc" stroke-width="20px" stroke-linecap="butt" />

<!--線の先がまるい stroke-linecap="round" -->
    <line x1="50" y1="100" x2="550" y2="100" stroke="#ccc" stroke-width="20px" stroke-linecap="round" />
  
<!--線の先が四角 stroke-linecap="square" -->
    <line x1="50" y1="150" x2="550" y2="150" stroke="#ccc" stroke-width="20px" stroke-linecap="square" />
</svg>

ブラウザでの表示

線の端を加工したブラウザでの表示

線を破線にする

線を破線にするには stroke-dasharray 属性で指定します。カンマで区切って破線の長さと、間隔を指定します。複数指定した場合は、その数分だけの長さを間隔を繰り返し表示します。

<svg width="500" height="200">
<!--破線の長さ10px、破線の間隔10px-->
    <line x1="50" y1="50" x2="550" y2="50" stroke="#666" stroke-width="10px" stroke-dasharray="10,10" />
    
<!--破線の長さ20px、破線の間隔10px-->
    <line x1="50" y1="100" x2="550" y2="100" stroke="#666" stroke-width="10px" stroke-dasharray="20,10" />
    
<!--破線の長さ30px、破線の間隔10pxと破線の長さ10px、破線の間隔10pxの組み合わせ-->
    <line x1="50" y1="150" x2="550" y2="150" stroke="#666" stroke-width="10px" stroke-dasharray="30,10,10,10" />
</svg>

ブラウザでの表示

線を破線にしたブラウザでの表示

破線を丸くする

破線を丸くするには stroke-linecap=”round” 属性を合わせて使用します。

<svg width="600" height="100">
<!--破線の長さ1px、破線の間隔20px で stroke-linecap="round" にする-->
    <line x1="50" y1="50" x2="550" y2="50" stroke="#666" stroke-width="10px" stroke-dasharray="1,20" stroke-linecap="round" />
</svg>

ブラウザでの表示

破線を丸くしたブラウザでの表示

破線の開始位置をずらす

破線の開始位置をずらして表示するには stroke-dashoffset 属性を指定します。

<svg width="600" height="200">
<!--破線の開始位置 のデフォルト-->
    <line x1="50" y1="50" x2="550" y2="50" stroke="#666" stroke-width="10px" stroke-dasharray="20,10"  />
    
<!--破線の開始位置を10pxずらす-->
    <line x1="50" y1="100" x2="550" y2="100" stroke="#666" stroke-width="10px" stroke-dasharray="20,10" stroke-dashoffset="10" />
</svg>

ブラウザでの表示

破線の開始位置をずらしたブラウザでの表示

線の透明度を変える

線の透明度を変えるには stroke-opacity 属性を指定します。

<svg width="600" height="200">
<!--破線の透明度 デフォルト-->
    <line x1="50" y1="50" x2="750" y2="50" stroke="#666" stroke-width="10px"  />
   
<!--透明度 0.5-->
    <line x1="50" y1="100" x2="750" y2="100" stroke="#666" stroke-width="10px" stroke-dashoffset="10" stroke-opacity="0.5" />
</svg>

ブラウザでの表示

線の透明度を変えたブラウザでの表示

ラベル文

ネスト化されたループ処理中、break・continue文でループ抜ける際に指定したラベルの付いたループを抜けるようにするのに、ラベル文を使用します。ラベル文を使用しない場合は内側のループをまるごと抜けます。

continue文:書き方

ラベル名は任意の名前にでき、break・continue の後に合わせて記述します。

ラベル名 :
for( var i = 0; 条件式 ; i++ ){
	ループ処理;
	for( var i = 0; 条件式 ; i++ ){
		if( 条件式 ){ continue ラベル名; }
		ループ処理;
	}
}

例1)配列 name から値を取り出して #example 内へpタグで書き出す処理と共に、3回のカウントしてその回数を合わせて書き出す

これはラベル文を使わない場合の内側のループの抜ける処理です。

HTML

<div id="example"></div>

JavaScript

var name = ['Aさん','Bさん','Cさん','Dさん','Fさん']
var element = document.getElementById('example');

for(var i in name){
    var newP = document.createElement('p');
    var newText = document.createTextNode('メンバーの名前: '+ name[i]);
    newP.appendChild(newText);
    element.appendChild(newP);
    for(var j=1; j<4 ; j++){
        if( j==2 ){ break ; }
        newTextCnt = document.createTextNode(' ネスト処理'+ j);
        newP.appendChild(newTextCnt);
    }
}

結果

ラベル文を使用しない場合は、内側のループカウントのみが飛ばされています。
配列 name から値を取り出して #example 内へpタグで書き出す処理と共に、3回のカウントしてその回数を合わせて書き出したブラウザでの表示

例2)配列 name から値を取り出して #example 内へpタグで書き出す処理と共に、3回のカウントしてその回数を合わせて書き出すが、2回のカウントの時点で最初のループを抜ける

ラベル文を使って内側のループから最初のループまで抜けます。

HTML

<div id="example"></div>

JavaScript

var name = ['Aさん','Bさん','Cさん','Dさん','Fさん']
var element = document.getElementById('example');

label:
for(var i in name){
    var newP = document.createElement('p');
    var newText = document.createTextNode('メンバーの名前: '+ name[i]);
    newP.appendChild(newText);
    element.appendChild(newP);
    for(var j=1; j<4 ; j++){
        if( j==2 ){ break label; }
        newTextCnt = document.createTextNode(' ネスト処理'+ j);
        newP.appendChild(newTextCnt);
    }
}

結果

ラベル文を使った場合は、内側のループカウントで条件に当てはまったら最初のループごと抜けるため、Aさんの名前とカウント1まで書き出されたところで処理が終わります。
配列 name から値を取り出して #example 内へpタグで書き出す処理と共に、3回のカウントしてその回数を合わせて書き出すが、2回のカウントの時点で最初のループを抜けたブラウザでの表示

continue文

ループ処理中に特定条件があてはまった場合に、そのループを1回だけ抜けたい時 continue文を使用します。

continue文:書き方

continue文はループ処理の前に条件式などと合わせて記入します。

for( var i = 0; 条件式 ; i++ ){
	if( 条件式 ){ continue; }
	ループ処理;
}

例)配列 name から値を取り出して #example 内へpタグで書き出すが、「Cさん」の書き出しだけしないようにする

HTML

<div id="example"></div>

JavaScript

var name = ['Aさん','Bさん','Cさん','Dさん','Fさん']
var element = document.getElementById('example');
 
for(var i in name){
	if(name[i] == 'Cさん'){ continue; }
    var newP = document.createElement('p');
    var newText = document.createTextNode('メンバーの名前: '+ name[i]);
    newP.appendChild(newText);
    element.appendChild(newP);
    if(name[i] == 'Cさん'){ break; }
}

結果

name の値が「Cさん」と一致した場合にのみループ処理を抜けて書き出さず、その後の人の名前は引き続き書き出されています。
列 name から値を取り出して #example 内へpタグで書き出すが、「Cさん」の書き出しだけしないようにしたブラウザでの表示

break文

ループ処理中に特定条件があてはまった場合に、そのループを抜けたい時 break文を使用します。

break文:書き方

break文はif文などの条件式と合わせて使用します。

for( var i = 0; 条件式 ; i++ ){
	ループ処理;
	if( 条件式 ){ break; }
}

例)配列 name から値を取り出して #example 内へpタグで書き出すが、「Cさん」を書き出したら処理をやめる

HTML

<div id="example"></div>

JavaScript

var name = ['Aさん','Bさん','Cさん','Dさん','Fさん']
var element = document.getElementById('example');
 
var name = ['Aさん','Bさん','Cさん','Dさん','Fさん']
var element = document.getElementById('example');
 
for(var i in name){
    var newP = document.createElement('p');
    var newText = document.createTextNode('メンバーの名前: '+ name[i]);
    newP.appendChild(newText);
    element.appendChild(newP);
    if(name[i] == 'Cさん'){ break; }
}

結果

書き出した name の値が「Cさん」と一致した場合にループを抜けているので、その後の人の名前は書き出されません。
配列 name から値を取り出して #example 内へpタグで書き出すが、「Cさん」を書き出したら処理をやめたブラウザでの表示

for…in文

for…in文では、指定の配列やオブジェクトの要素に対して、先頭からひとつずつ取り出し、それぞれに処理を繰り返し行います。

for…in文:書き方

一回の処理で、配列やオブジェクトから仮の変数に、インデックスやキーが入れられます。それを元に値を取得します。(値そのものが取り出されるわけではありません)

for( 仮の変数(i など)in 配列やオブジェクト ){
	繰り返し行う処理 〜;
} 

例1)配列 name から値を取り出して #example 内へpタグで書き出す

HTML

<div id="example"></div>

JavaScript

var name = ['Aさん','Bさん','Cさん','Dさん','Fさん']
var element = document.getElementById('example');
 
for(var i in name){
    var newP = document.createElement('p');
    var newText = document.createTextNode('メンバーの名前: '+ name[i]);
    newP.appendChild(newText);
    element.appendChild(newP);
}

結果

変数 i に入った配列のインデックスから name の値を取り出して、pタグへ挿入し表示されています。
配列 name から値を取り出して #example 内へpタグで書き出す

for文

for文では、あらかじめ決められた回数分だけ処理を繰り返し行います。while文よりもシンプルで高速な処理を行う事ができます。

初期化式で、複数の変数を宣言し、カウンタを複数もつことも可能です。

for:書き方

for( 初期化式(var = 1 など); 条件式 ; インクリメント or デクリメント ){
	繰り返し行う処理 ;
} 

for文複数のカウンタをもつ場合:書き方

複数のカウンタを作る場合は、カンマで初期化式を増やします。

for( var i = 0 , j = 1 ; 条件式 ; i++ , j++ ){
	繰り返し行う処理 ;
} 

例1)i の値が5以下のあいだ、#example にテキストを挿入する

while文の例と同じ処理を for文で行います。

HTML

<div id="example"></div>

JavaScript

var element = document.getElementById('example');
 
for(var i=0; i<5 ; i++ ){
    var newP = document.createElement('p');
    var newText = document.createTextNode((i+1) + '回目の処理です');
    newP.appendChild(newText);
    element.appendChild(newP);
}

結果

i の値が 0 から始まり 5 以下になるまで(4まで)pタグを作り #example 挿入するので 5 個のpタグが書き出されています。
i の値が5以下のあいだ、#example にテキストを挿入した結果、#example に 5 個のpタグが挿入された

例2)i の値が5以下のあいだ、#example にテキストを挿入する(” ”回目の部分は別のカウンタで表示する)

HTML

<div id="example"></div>

JavaScript

var element = document.getElementById('example');
 
for(var i=0, j=1 ; i<5 ; i++, j++ ){
    var newP = document.createElement('p');
    var newText = document.createTextNode(j + '回目の処理です');
    newP.appendChild(newText);
    element.appendChild(newP);
}

結果

pに挿入する” ”回目の部分は変数 j を使って表示しています。
i の値が5以下のあいだ、#example にテキストを挿入した結果(” ”回目の部分は変数 j のカウンタで表示した

do…while文

do…while文は条件式が当てはまる間、指定された処理を繰り返し行います。while文と違う点は、条件に関係なく最初に一度処理をおこなう点です。

do…while文の処理のながれは、処理→条件式→当てはまる→処理 というながれです。while分の場合は、条件式→当てはまる→処理→条件式 になるので、条件式が当てはまらない場合は一度も処理が行われません。(例2を見て頂くとわかりやすいかもしれません)

do…while文:書き方

do {
	条件式に当てはまる場合の処理〜
} while( 条件式 ) ;

例1)value の値が5以下のあいだ、#example にテキストを挿入する

HTML

<div id="example"></div>

JavaScript

var value = 1; 
var element = document.getElementById('example');

do {
    var newP = document.createElement('p');
    var newText = document.createTextNode(value + '回目の処理です');
    newP.appendChild(newText);
    element.appendChild(newP);
    value++;
} while(value < 0) ;

結果

value の値が 0 から始まり 5 以下になるまで(4まで)pタグを作り #example 挿入するので 5 個のpタグが書き出されています。

例2)value の値が0以下の間は、#example にテキストを挿入する(しかし、value 値は最初から 0 を超えた値になっている)

HTML

<div id="example"></div>

JavaScript

var value = 1; 
var element = document.getElementById('example');

do {
    var newP = document.createElement('p');
    var newText = document.createTextNode(value + '回目の処理です');
    newP.appendChild(newText);
    element.appendChild(newP);
    value++;
} while(value < 0) ;

結果

最初から条件に当てはまりませんが、条件に関係なく一度は処理が行われるので、pが一つ挿入されました。

while文

while文は条件式が当てはまる間、指定された処理を繰り返し行います。インクリメント などと合わせて使い、ある一定の数字に達するまで処理を繰り返し行うことに使用したりします。

while文:書き方

while( 条件式 ){
	条件式に当てはまる場合の処理〜
}

例)value の値が5以下の間、#example にテキストを挿入する

HTML

<div id="example"></div>

JavaScript

var value = 0; 
var element = document.getElementById('example');

while(value < 5){
    var newP = document.createElement('p');
    var newText = document.createTextNode((value+1) + '回目の処理です');
    newP.appendChild(newText);
    element.appendChild(newP);
    value++;
}

結果

value の値が 0 から始まり 5 以下になるまで(4まで)pタグを作り #example に挿入するので 5 個の pタグが書き出されています。
value の値が5以下の間、#example にテキストを追加した結果、#example に5 個の pタグが挿入された

switch文

if else文でも複数の条件で処理を分ける事ができますが、switch 文であれば同じ式で、値が違う場合のみその値に応じた処理を行うことができます。

switch文:書き方

case で処理を記入したら必ず、break も記入してその処理をしたら switch文 から抜けるようにします。break を記入しなかった場合は 値1 で処理が実行されたのにもかかわらずその後の処理も続けて行われてしまいます。

switch( 条件式 ){
	case 値1:
		条件式の結果が 値1 であった場合の処理〜;
		break;
	case 値2:
		条件式の結果が 値2 であった場合の処理〜;
		break;
	case 値3:
		条件式の結果が 値3 であった場合の処理〜;
		break;
	default:
		全ての値に当てはまらない場合の処理〜;
}

例)value の値によって #example の文章を変更する

HTML

<p id="example">value の値によって文章を変更します</p>

JavaScript

var value; 
var element = document.getElementById('example');

switch( value = 1 + 5){
	case 3:
		element.innerHTML = '3ではありません';
		break;
	case 5:
		element.innerHTML = '5ではありません';
		break;
	case 6:
		element.innerHTML = '正解です!6です';
		break;
	default:
		element.innerHTML = 'どこにもあてはまりません…';
}

結果

value の値は 6 になるので、case 6 の処理が実行されました。
value の値によって文章を変更した結果、'正解です!6です'とテキストが変わった。