2014年10月31日金曜日

Canvasによる単純な図形の描画

HTML5とJavaScriptを連携させることで、簡単に描画することの出来る機能Canvasについて、メモを残しておきます。

詳細な仕様は以下のサイトで確認できます。
W3schools.com

drawing
まずはHTMLです。わかりやすいように、canvasの枠線だけ指定しています。
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>drawing</title>
    <style>
    canvas{
     border: solid;
    }
    </style>
  </head>
  <body onload="draw();">
      <canvas id="paint" width="400" height="300"></canvas>
      <script src="/myscript.js"></script>
  </body>
</html>

HTMLは非常にシンプルです。
①canvasタグにidとcanvasのサイズを指定する。

②bodyタグ内にonload=draw();と記載しておく。

このメソッド名は任意のもので構いません。要はJavaScriptと整合性が取れていれば良いというわけです。


やったこと

今回は、canvas内にランダムに複数の三角形を書き込む処理を書いてみました! 実際の例は本文の最後に乗せておきます。

以下、JavaScriptのコードになります。ちょっと長いですが、コメントの通りのことしかやっておりませんので、それほどややこしくはないです!

myscript.js
//これがHTMLから呼び出されるメソッドです
function draw(){
    //canvasに設定したidを元に、canvasのオブジェクトを生成します。
    var canvas = document.getElementById('paint');
    //古いブラウザーではcanvasが実装されていないため、チェックしておきます。
    if (canvas.getContext){
      //今のところ2Dしか実装されていませんが、contextを作成します。
      //描画に関する設定はこのオブジェクトを使用して指定します。
      var ctx= canvas.getContext('2d');
      //ちょっと長くなるので、paintメソッドを定義しました。
      paint(context);
    }
}

function paint(ctx){
    //Pointクラスはcanvas内のランダムな座標を取得するために定義しました。
    point = new Point(400, 300);
    //70回くらい図形を描きます。
    for(i = 0; i < 70; i++){
        //opacityです。0.0-1.0で指定するため、以下の関数で上手くいきます。
        ctx.globalAlpha = Math.random();
        //描画の開始を宣言します。
        ctx.beginPath();
        //このメソッドは図形の色をランダム指定するために定義しました。
        //線に色を付けたい場合は、strokeStyleに色を指定します。
        ctx.fillStyle = randomColor();
        //開始地点の座標です。座標はcanvasの左上から計算します。
        ctx.moveTo(point.randomX(), point.randomY());
        //二つ目の座標です。
        ctx.lineTo(point.randomX(), point.randomY());
        //三つ目の座標です。三角形ができました。
        ctx.lineTo(point.randomX(), point.randomY());
        //描画します。
        //線の場合はstroke()メソッドを使います。
        ctx.fill();
    }

//ランダムに色を取得するためのメソッドです。
function randomColor(){
    var r = Math.floor(Math.random() * 256);
    var g = Math.floor(Math.random() * 256);
    var b = Math.floor(Math.random() * 256);
    return 'rgb(' + r + ',' + g + ',' + b + ')';
}

//クラスっぽく作りました。
function Point(canvas_width, canvas_height){
    //キャンバスのサイズを取得しておきます。
    this.x = canvas_width;
    this.y = canvas_height;

    //x座標です。
    this.randomX = function (){
      return Math.random() * this.x;
    }
    //y座標です。
    this.randomY = function(){
      return Math.random() * this.y;
    }
}

思った以上に簡単に描画ができました! ちなみに曲線の描画には

arc(始点x, 始点y, 半径, 始点の角度, 終点の角度, 回る方向)

四角形には

fillRect(始点x, 始点y, 終点x, 終点y)

を使います。もちろんcontext.はお忘れなく。

JavaScriptによるシンプルなAjaxの開始方法

一番原始的な、非同期通信の開始法をざっくりメモしておきます。

//objectを作成
var xml= new XMLHttpRequest();

//今回はGETで開く。もちろんPOSTでもOK
xml.open('GET', reqUri, true);

//onloadを定義しておいて、中でJsonの処理とかをする
xml.onload = function(){
    parsedJSON = JSON.parse(someJson);
};

//最後にRequestを送信
xml.send();

細かい仕様は以下のサイトなんかを見れば一目瞭然です。openはいろいろとオプショナルな引数があるので、ちょこちょこ確認する必要がありそうです。

MDNのサイト

jsonデータをやり取りする際でも一番の基本なので、しばらくデザインだけやってて、久しぶりに触ろうと思ってあれ? となった時のために、メモしておきました。

Bloggerでソースコードを表示する方法

日本では知名度がいまいちなBloggerですが、私はGoogleのあえて完璧に洗練させない主義(褒めています! でもNexus6は出来過ぎた子なので使わないかもしれません笑)が好きなので、とりあえず彼らのサービスを良く使っております。Bloggerはわりと何でもできるので、これから日本でも少しずつユーザが増えていくかもしれませんね。

 そんなBloggerですが、いじれる所が多くてけっこうわかりづらい。。。トップにページを固定するのもややこしかったりして、さすがにWordpressの代わりにはなりそうもないというのが率直な印象。でもデザインとかはけっこう凝れる方だと思いますよ。

 さて、そんなちょっと尖ったブログサービスのBloggerですが、ソースコードをハイライトするにもひと手間必要でした。以下、参考にさせて頂いたサイト様です。

  DevAchieve-BloggerにソースコードをハイライトするSyntaxHighlighterを導入する-

  Pirates of 富山湾-Bloggerにソースコードをきれいに載せる「SyntaxHighlighter」-

 細かい設定などは、先人の遺産を参照ください。 以下、大まかな流れだけ備忘録。

 1.ここに飛んで、必要な言語をチェック。それからGenerateをぽちっと押します。

 2.できたソースをコピペして、bloggerの次の階層に貼り付けます。
 ダッシュボード→”テンプレート”→”HTMLの編集”→headタグ内のお好きな場所に。

 色々と編集されている方もおられるので、チェックしてみてくださいね!

 お次はCSSを編集する場合です。
こちらでCSSファイルが入手できますので、それを編集することになります。編集方法はDevAchieve様のサイトがお詳しいです。

 3.次の改装に、編集したCSSを貼り付けます。

 ダッシュボード→”テンプレート”→”カスタマイズ”→上級者向け→CSSを追加
 あとはpreタグなんかを使ってブログに埋め込むと以下のように上手いこと表示されます。

でも実はこれ、タグのエスケープが面倒くさい。。。が、そこはHTMLを編集できる特性を生かして、次の方法を試しましょう!

1.記事作成の際”HTML”を選びます。
以下の解釈ソース(aliasとか必要なオプションは適宜変更です)をはりつけましょう。今回はXMLを解釈するものだとします。
<pre class="brush: xml;">
//お好きなpreタグで囲われたソースをどうぞ
</pre>

2.”作成”に戻りましょう。すると、先ほどの”//お好きなpreタグで囲われたソースをどうぞ”が独り不安げに浮かんでいるはずです。。。

3.ここに、表示したいソースコードを右クリックから”プレーンテキストとして貼り付ける”で貼り付けます。

もちろんHTMLから全部編集しても構いませんが、こうすると置換でうなーとかしなくて良いということですね。

試しに、次のようなXMLコードを表示したいとします。
<pre class="brush: js;">
//ココに気ままにJavaScriptソースを記述!
</pre>

これを、先ほどの手順で埋め込んで、”HTML”で確認すると、以下みたいな感じになっていると思います。

<pre class="brush: xml;">&lt;pre class="brush: js;"&gt;
// ココに気ままにJavaScriptソースを記述!
&lt;/pre&gt;
</pre>

簡単ですね!