||
ホーム / 技術っぽいもの / HTML/Canvas要素で遊んでみる (1)
2006/03/26
つい最近まで全く知らなかったのですが、先日リリースされたFirefox 1.5を含むいくつかのウェブブラウザでは
<canvas>という画像を動的に描画出来る新しい要素がサポートされている様です。
# HTML 5 にも取り込まれる模様。
今までFlashやJavaを用いて行っていたことのいくつかはこのcanvas要素で行えるのではないでしょうか。
eval()や、XMLHttpRequest (いわゆるAJAXですな)と組み合わせたりしても面白そうな気がします。
というわけで早速簡単なサンプルを作って基礎を学んでみます。
Javascript自体もあんまり経験が無いのでその勉強も兼ねてやってみたいと思います。
仕様等
canvas要素について言及されている日本語のサイト
View Sourceしたものと同じ内容です。
<script type="text/javascript"> <!-- // 大域変数の美しくない定義 var step = 0; var colors = new Array(1,1,1,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); var xs = new Array(3,1,2,3,4,5,3,1,2,3,4,5,3,1,2,3,4,5,1,3,1,2,3,0,0,0,0,0, 3,1,2,3,4,5,3,1,2,3,4,5,3,1,2,3,4,5,1,3,1,2,3,0,0,0,0,0); var ys = new Array(0,1,1,1,1,1,2,3,3,3,3,3,4,5,5,5,5,5,6,6,7,7,7,0,0,0,0,0, 0,1,1,1,1,1,2,3,3,3,3,3,4,5,5,5,5,5,6,6,7,7,7,0,0,0,0,0); // canvasがサポートされていれば、枠と格子を描画して引き続きタイマをセット。 // function Initialize() { canvas = document.getElementById("canvas0101"); if(canvas.getContext) { // mozilla.orgのtutorialにあったサポート判別法 context = canvas.getContext("2d"); // 枠を書く context.fillStyle = "#006699"; context.fillRect(0, 0, 300, 340); context.fillStyle = "#ffffff"; context.fillRect(9, 9, 280, 320); // 格子を書く for(var i = 0; i <= 320; i += 40) { // 縦線 if(i != 320) { context.beginPath(); context.moveTo(i+10, 9); context.lineTo(i+10, 329); context.closePath(); context.stroke(); } // 横線 context.beginPath(); context.moveTo(9, i+10); context.lineTo(289, i+10); context.closePath(); context.stroke(); } // 引き続きタイマをセット setTimeout("DrawPic()", 400); } } // 一定時間毎に呼ばれてお絵かきをする関数 // function DrawPic() { // canvasをサポートしていないウェブブラウザではこの関数は呼ばれないので // if(context.getContext){...}は書かないでおく。 canvas = document.getElementById("canvas0101"); context = canvas.getContext("2d"); // 色を設定して gradient = context.createLinearGradient(40*xs[step]+11, 40*ys[step]+11, 40*xs[step]+49, 40*ys[step]+49); if(colors[step] == 1) { gradient.addColorStop(0.1, "#FCC15F"); gradient.addColorStop(0.3, "#F6760E"); gradient.addColorStop(0.8, "#F6760E"); gradient.addColorStop(0.9, "#C75E07"); context.fillStyle=gradient; } else if (colors[step] == 2) { gradient.addColorStop(0.1, "#67FF3C"); gradient.addColorStop(0.3, "#008000"); gradient.addColorStop(0.8, "#008000"); gradient.addColorStop(0.9, "#005E00"); context.fillStyle = gradient; } else { context.fillStyle = "#ffffff"; } // 塗りつぶす context.fillRect(40*xs[step]+11, 40*ys[step]+11, 38, 38) // 次のコマへ進む if(++step >= colors.length) { step = 0; } setTimeout("DrawPic()", 200); } //--> </script>
Copyright © MASUDA Yoshihiro (contactmasudayoshihiro.jp).