HTML

【初心者】HTMLのcanvasとJavaScriptでお絵かきアプリ作る【ベース作り編】

【初心者】HTMLのcanvasとJavaScriptでお絵かきアプリ作る【ベース作り編】

今回はHTML, JavaScriptに少し慣れてきたかたに向けて、HTMLのcanvas要素を使ってお絵かきアプリが簡単に作れるということを紹介したいと思います。

今回作るものは次のものになります。

今回のお絵かきアプリ今回のお絵かきアプリ

 

実際に今回の「お絵かきアプリ」を使ってみたい方は「こちら(Github pagesで公開)」からアクセスしていただければ試すことが出来ます。(パソコンからのみ利用可)

今回は「お絵かきアプリ」の作り方の紹介記事になりますが、canvas要素を使うことで次のような希望も実現することが出来ます。

最終的にはゲームを作ってみたいなー。

画像を加工出来るアプリ作ってみたいなー。

今回の記事では次のような内容で話を進めていきます。

今回の記事内容
  • HTMLのcanvasを使って出来ること
  • canvasとJavaScriptをつかったお絵かきアプリの作り方

HTMLのcanvasを使って出来ること

HTMLのcanvasを使うことで出来ることはいろいろあります。

Webビデオ通話アプリの場合は、canvasだけではなく、パソコンのカメラ・マイクの操作と組み合わせることで実装が可能です。

当たり判定は、重力を考慮した複雑なゲームを作る場合は、数学や物理の概念が必要になってくる場面が出てきます。

そのため、「Webビデオ通話アプリやゲームを作るのはハードルが高いなー」と思っている方は、「お絵かきアプリ」から入ってcanvasで出来ることに徐々に慣れていくと良いでしょう。

今回作る「お絵かきアプリ」はHTML, JavaScriptの基本を学習した方であれば数時間で実装できると思います。

それでは次にお絵かきアプリの作り方について解説していきます。

canvasとJavaScriptをつかったお絵かきアプリの作り方

今回は最低限の機能のみを実装します。

今回実装する機能
  • canvas上でマウスをドラッグしたら線を引く
  • 線の色は黒のみ
  • 「全消し」ボタンを押したらcanvasを真っ白の状態に戻す

次回以降の記事で次のような機能を追加する予定です。

次回の追加予定機能
  • 線の太さを変更できる
  • 色を変更できる
  • 消しゴム機能

今回使用するソースコードは以下のGithubのレポジトリにアップしているので、参考にしたい方はレポジトリのソースコードをダウンロードしていろいろいじってみると良いでしょう。

今回使用するファイルは2ファイルのみです。(HTMLファイル1つ、JavaScriptファイル1つ)

  • index.html
  • main.js

それでは実際にそれぞれのコードを見ながら解説していきます。

HTMLファイル

HTMLは中身をみていただくとわかると思いますが、いたってシンプルです。

上記のコードで主に行っていることは次の3つです。

HTMLの内容
  1. 絵(線)を書くためのcanvasを用意
  2. 絵(線)を消すためのボタンを用意
  3. canvas上の絵(線)を描画・削除するための機能を実装するJavaScriptファイルの読み込み

しかし、ここで1点注意が必要です。

①の「絵(線)を書くためのcanvasを用意」でcanvasを用意しているのですが、width(横幅)、height(高さ)をstyle(CSS)で定義するだけだと次のようにマウスの位置に対して線を引く位置がおかしなことになります。

CSSのみのwidth, height指定はおかしな挙動になるCSSのみのwidth, height指定はおかしな挙動になる

 

この問題が起きてしまう原因は、canvasのデフォルトサイズがwidth(横幅)300px、height(高さ)150pxだからです。

style(CSS)を使ってwidthとheightを400pxにした場合、見た目上は意図したサイズになっていたとしても、canvasが内部で保持しているサイズはwidth300px、height150px のままです。

つまり、比率が異なるため発生していた問題になります。

次の記事でも詳細が説明されているので、参考にしていただけたらと思います。

この問題を解決するためには次の2通りがあります。

問題解決方法
  • HTMLのcanvas要素に直接width, heightを指定する
  • JavaScript側でwidth, heightを指定する

今回はお絵かきアプリの作り方の説明がテーマのため、①のcanvas要素に直接「width=”400px”」「height=”400px”」指定しています。(13, 14行目)

②のやり方は先程の記事(「canvasのサイズ指定」)にてやり方が説明されていますのでそちらを参照していただけたらと思います。

それでは次に実際にcanvasを使って絵を書く処理を実装しているJavaScriptのコードを確認しましょう。

JavaScriptファイル

JavaScriptのコードは次のとおりです。

それぞれのコードが何を行っているのかコメントを細かく書いているので、コードが長めに感じられるかもしれませんが、コメントを除くと半分くらいの50~60行ほどのコードとなります。

実際にこのコードで行っていることを細かく説明するのは以下の理由により割愛します。

  • コメントで説明している内容と重複するため
  • コードと記事の文章を行ったり来たりで読むのが大変になるため

その代わりにこちらのコードで行っていることをブロックに分けて説明します。

各ブロックの内容
  1. 4~12行目: 絵を書くために必要な情報の定義を行っている
  2. 15~99行目: お絵かきアプリに必要な機能(関数)の定義を行っている
  3. 102行目: マウスイベント・クリックイベントの初期化を行っている

4~12行目: 絵を書くために必要な情報の定義を行っている

ここでは、canvasを使って絵を書くために必要な情報の取得や絵を書く際に必要となる設定値の用意しています。

  • canvas: HTMLのcanvas要素のDOMを取得
  • context: canvasに絵を書くために必要な情報
  • lastPosition: 前回のマウスの位置情報。線を書く際は前回のマウス位置と現在のマウス位置を使って直線を引く。
  • isDrag: マウスをドラッグ(クリックしっぱなし)時のみ絵を書けるようにするためのフラグ

15~99行目: お絵かきアプリに必要な機能(関数)の定義を行っている

実装されている関数は次のとおりです。

  • draw関数: canvas上に線を引く(絵を書く)処理を行う
  • clear関数: canvas上の線(絵)を全て削除する
  • dragStart: 線(絵)の書き始めに必要な情報をセットする
  • dragEnd: 線(絵)を書き終わった後に必要な情報をセットする
  • initEventHandler: イベント処理の定義を行う

上記のように行う処理ごとに関数を分けることによって、「1つの関数では1つのことだけ行う」と言ったように機能を分離でき管理しやすいコードになります。

102行目: マウスイベント・クリックイベントの初期化を行っている

こちらはinitEventHandler関数を呼び出しているだけで、「initEventHandler」の関数を用意しないで、次のように直接イベントの定義を実装しても問題ないです。

まとめ

あらためてcanvasで出来ることをまとめたいと思います。

今回は「お絵かきアプリ」のベースの作り方をサンプルコードを使って説明しました。

次回は今回作った「お絵かきアプリ」に「色を変更できる機能」、「線の太さを変えられる機能」などを追加するために必要な実装を解説します。

今回使ったソースコードと、実際に動作しているお絵かきアプリにリンクを以下に貼っておきます。(パソコンでのみ絵を書くことが出来ます。)

 

【3つの特典付き】Webエンジニアに必要な基礎スキルを体系的に効率良く身につけたいですか?

LINE登録で無料特典を受け取る

次のような方向けに、学習をサポートするコンテンツを無料プレゼントしています。

  • Webエンジニアになりたいけど何から学習を始めれば良いかわからない
  • 今まで独学で頑張ってきたけど、独学に限界を感じてきた
  • プログラミングは出来るけど、大きめのコードが書けない

「プレゼント詳細が知りたい」「プレゼントを受け取りたい」といった方は、以下のボタンをクリックして詳細ページをご確認ください。

無料特典を受け取る

 

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です