tableのデータをcanvasに描画(作成中)
HTML
<table id="target">
<tbody>
<tr> <th>1月</th> <td>120</td> </tr>
<tr> <th>2</th> <td>59</td> </tr>
<tr> <th>3</th> <td>38</td> </tr>
<tr> <th>4</th> <td>71</td> </tr>
<tr> <th>5</th> <td>86</td> </tr>
<tr> <th>6</th> <td>184</td> </tr>
<tr> <th>7</th> <td>85</td> </tr>
<tr> <th>8</th> <td>9</td> </tr>
<tr> <th>9</th> <td>42</td> </tr>
<tr> <th>10</th> <td>87</td> </tr>
<tr> <th>11</th> <td>117</td> </tr>
<tr> <th>12</th> <td>300</td> </tr>
</tbody>
</table>
<span id="result"></span>
CSS
body { min-width: 425px; }
table,
canvas { margin: 2px 2px 1em; vertical-align: top; }
table { border-collapse: collapse; border-spacing:0; table-layout: inline-table; }
th,td{ border:1px solid; padding: 3px 9px; text-align: right; }
th { background: #eee; font-weight: 100; }
#target { float: left; }
#target:after { content:""; display:block; clear: both; zoom:1; }
JavaScript
/*グラフ描画するやつ 作りかけ*/
var d = document;
var getID= function(e) { return d.getElementById(e);};
//var getClass= function(c){ return document.getElementsByClassName(c);};
var getTag= function(p, t) { return p.getElementsByTagName(t); };
var randomNum= function(Min,Max){return Math.floor(Math.random()*(Max+1-Min))+Min;};
/* config */
var cW= 330, cH= 330;
var fontSize= 14, fontFamily= "Museo, Arial, Helvetica, Meiryo, sans-serif";
var tColor= "#000"; //文字色
var bSaturation= "50%", bLightness= "50%"; /*棒の彩度と明度*/
var t= getID("target"); //対象となる表を取得
var tb= t.tBodies[0]; //表のtbody(※tbody のマークアップの有無に関わらず必須っぽい)
var canvas= d.createElement("canvas");
canvas.width= cW; canvas.height= cH; /*設定値からcanvasの寸法を指定(HTML側でもやってもいい)*/
var ctx= canvas.getContext("2d");//context取得
ctx.strokeRect(0, 0, cW, cH);//strokeColor未指定時の初期カラーである黒でボーダーを描画
ctx.font= fontSize + "px " + fontFamily;//設定値からフォントを指定
for (i=0; i<12; i++) {
var h= tb.rows[i].cells[0].innerHTML;
var v= tb.rows[i].cells[1].innerHTML;
ctx.fillStyle = "#000";
ctx.fillText(h, fontSize, fontSize * i + 20);
ctx.fillStyle = "hsl(" + i * 40 % 360 + "," + bSaturation + "," + bLightness + ")"; /*3*/
ctx.fillRect(10 + fontSize * 2, 10 + (i * fontSize - 1), v, fontSize - 4);
}
getID("result").appendChild(canvas); //出力
// テーブルが複数でも書式が違っても書き出せるように工夫したい。
// (classで取得? / html側で対象セルを明示?)
// テーブルの中で最大の文字数を持つthの文字数を取得してバーの描画位置を文字サイズ×文字数分ずらし、
// バー自身のサイズも調整したい。