SlideShare une entreprise Scribd logo
1  sur  37
Canvas入門04
Canvasで簡易ペイントソフト作成
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 2
今回の講義内容
• Canvasの描画機能を利用して、ペイン
トソフトを作成
– マウス操作とcanvasの‘線’を利用してペイ
ント機能を実装
– タッチ操作で同様の機能を実装
– マウスとタッチの両方動作するようにする
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 3
完成イメージ
カラー変更
太さ変更
画面クリア 保存
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 4
作業内容の基本
• 線の描画
– 作成する基本的な内容は、
マウス(指)を動かしている時に、マウス座標に
線を描画する
だけです。
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 5
まずは、線を描画してみましょう。
ctx.beginPath();
ctx.moveTo(x, y);
ctx.lineTo(x, y);
ctx.stroke();
moveTo (0,0)
lineTo (100,100) moveTo (300,100)
lineTo (400, 0)
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 6
ペイントの基本仕様
• Canvasのサイズ
– 縦幅:画面縦幅の半分
– 横幅:画面横幅に合わせる
• 背景用四角形の描画
– Canvasと同じサイズ、塗り白色の四角形を描画
• Canvas上の操作
– タッチ、マウスの両方で動作可
• ペンの初期値
– 太さ:2px
– 色:赤色
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 7
ペイントの基本仕様
• Canvasのサイズ
– 縦幅:画面縦幅の半分
– 横幅:画面横幅に合わせる
• 背景用四角形の描画
– Canvasと同じサイズ、塗り白色の四角形を描画
• Canvas上の操作
– タッチ、マウスの両方で動作可
• ペンの初期値
– 太さ:2px
– 色:赤色
課題
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 8
描画操作の流れ
• touchstart / mousedown(画面をタッチ・マウスダウンした時)
– 線の色や太さを指定する
– タッチした座標で moveTo()
– ?
• touchmove / mousemove(画面上をドラッグした時)
– 移動後の座標で lineTo()
– stroke() する
• touchend / mouseup(画面から指・マウスを離した時)
– ?
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 9
まずはPC用に
マウス操作
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 10
ユーザ入力による制御
• マウスなどのユーザ操作(イベント)の制御方法
記述例
対象要素.addEventListener( ’ユーザ操作’, function(e){
実行したい内容;
});
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 11
マウス操作
• 主なマウスイベント(ユーザ操作)
– click クリック
– dblclick ダブルクリック
– mouseout 要素上からマウスが離れた
– mouseover 要素上にマウスが乗った
– mousedown マウスボタン押した
– mouseup マウスボタンを離した
– mousemove マウスが動いた
• マウス座標の取得(引数を利用)
– e.pageX : マウスポインタがある X 座標
– e.pageY : マウスポインタがある Y 座標
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 12
マウス操作
• 下記のイベントの違いを確認しよう
– click クリック
– mousedown マウスボタンを押した
– mouseup マウスボタンを離した
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 13
動きが変!
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 14
描画操作の流れ
• touchstart / mousedown(画面をタッチ・マウスダウンした時)
– 線の色や太さを指定する
– タッチした座標で moveTo()
– 描画開始したことを覚える(フラグ)
• touchmove / mousemove(画面上をドラッグした時)
– 移動後の座標で lineTo()
– stroke() する
• touchend / mouseup(画面から指・マウスを離した時)
– 描画終了したことを覚える(フラグ)
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 15
マウスダウン直後か
どうか判断する
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 16
If文と変数で
実現できます
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 17
この変数を
フラグと言います
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 18
スマホ用に
タッチ操作
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 19
ユーザ操作
• タッチ操作
– touchstart : タッチしたとき
– touchmove : タッチしたまま動かしたとき
– touchend : タッチ状態から離れたとき
• タッチ座標
– event.changedTouches[0].pageX
: タッチされている画面位置の X 座標
– event.changedTouches[0].pageY
: タッチされている画面位置の Y 座標
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 20
共通のコードで
動作確認したい
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 21
jQueryを使って
簡略化
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 22
今回の使い方
• onを使う
– onを使うと、複数同時にイベントを設定できる
セレクタ.on(’操作1 操作2’, function(e){
実行したい内容;
});
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 23
タッチ環境かどうか確認
• 確認方法
• 結果
– true だとタッチ環境、false だとマウス環境
– 上記を判断して、JSの記述を分岐する
('ontouchstart' in window)
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 24
スマホのブラウザで
操作してみよう
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 25
注意点
• クリックやタッチは、他のコンテンツでも
反応
– PCの場合:<a>タグなど
– スマフォの場合:ページスクロールなど
• 回避方法
– e.preventDefault()
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 26
タッチすると
画面が青くなる
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 27
タッチすると画面が青い
• Androidのブラウザの仕様
– CSSで解決
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 28
カラーの変更
• 赤、青、緑、黄、黒
– <ul><li>タグを利用して、CSSで背景色を指
定してボタンを作成
• 設定手段
– 各<li>タグを、touchstart / mousedown し
たら、線の色を指定の色に変更する
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 29
カラーの変更
• タッチ処理に、同じような設定が多くて
面倒
• 処理を一つにまとめたい
– <li>タグの背景色をそのまま利用して、一つ
の処理にまとめる
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 30
ペンサイズの変更
• 線の太さを変更
– <ul><li>タグを利用して、2px、4px、6pxに
変更できるボタンを作成
• 設定手段
– 各<li>タグを、touchstart / mousedown し
たら、線の太さを変更
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 31
ペンサイズの変更
• タッチ処理に、同じような設定が多くて
面倒
• 処理を一つにまとめたい
– <li>タグの文字をそのまま利用して、一つの
処理にまとめる
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 32
クリアボタン
• 画面を真っ白に変更
– <ul><li>タグを利用して、ボタンを作成
• 設定手段
– <li>タグを、touchstart / mousedown した
ら、clearRectをして、白色の矩形を描画し
直す
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 33
画像保存
• Canvasの問題点
– canvasのデータは、そのまま画像ファイルと
して保存できない。
• 実現手段
– Imgタグとして表示して、ブラウザの機能で
保存する
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 34
画像形式に変換
• canvasデータを画像形式に変換
– <ul><li>タグを利用してボタンを作成し、ボタ
ンを押したら、変換したデータを<img>で表
示
• 変換方法
– canvas. toDataURL()
• 画像のアドレスとして生成される
• 生成されたアドレスを利用して、imgタグで表示
• HTML上に<div>タグを記述し、その中にimgタグ
を追加する
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 35
タグの生成方法
• タグの生成
オブジェクト名 = document.createElement(“タグ名”);
• 属性の追加
オブジェクト名.属性名 = 値;
• タグ内への文章追加
オブジェクト名. innerHTML = 値;
• タグへのCSS指定
オブジェクト名. style.プロパティ = 値;
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 36
タグの追加方法
• ID指定でのタグの追加
document.getElementById(“id名”).appendChild(オブジェクト名);
• タグ指定でのタグ追加
var 親オブジェクト名 =
document.getElementByTagName (“親タグ名”);
親オブジェクト名[何番目].appendChild (オブジェクト名);
Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 37
次回までの課題
• ボタンなどの見た目をデザインしてみよう
• 可能であれば、オリジナル機能を追加してみよう。

Contenu connexe

En vedette

Framerで始めるプロトタイプコーディング
Framerで始めるプロトタイプコーディングFramerで始めるプロトタイプコーディング
Framerで始めるプロトタイプコーディングmasaaki komori
 
インターネットってなんだろう?
インターネットってなんだろう?インターネットってなんだろう?
インターネットってなんだろう?Tsutomu Kawamura
 
Vimから見たemacs
Vimから見たemacsVimから見たemacs
Vimから見たemacsShougo
 
JavaScriptによるvideo audio要素のコントロール入門
JavaScriptによるvideo audio要素のコントロール入門JavaScriptによるvideo audio要素のコントロール入門
JavaScriptによるvideo audio要素のコントロール入門Yossy Taka
 
Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-
Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-
Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-Yossy Taka
 
スマホアプリ開発-プロモーション・集客・サポート・広告収入-
スマホアプリ開発-プロモーション・集客・サポート・広告収入-スマホアプリ開発-プロモーション・集客・サポート・広告収入-
スマホアプリ開発-プロモーション・集客・サポート・広告収入-Yossy Taka
 
Ajax非同期通信によるサーバー通信
Ajax非同期通信によるサーバー通信Ajax非同期通信によるサーバー通信
Ajax非同期通信によるサーバー通信Yossy Taka
 
JavaScriptによるgoogle maps apiの使い方
JavaScriptによるgoogle maps apiの使い方JavaScriptによるgoogle maps apiの使い方
JavaScriptによるgoogle maps apiの使い方Yossy Taka
 
JavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
JavaScriptのオブジェクト:Mathオブジェクト、DateオブジェクトJavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
JavaScriptのオブジェクト:Mathオブジェクト、DateオブジェクトYossy Taka
 
JavaScript Basic 02 jQuery
JavaScript Basic 02 jQueryJavaScript Basic 02 jQuery
JavaScript Basic 02 jQueryYossy Taka
 
JavaScript Basic 01
JavaScript Basic 01JavaScript Basic 01
JavaScript Basic 01Yossy Taka
 
Webデザインのセオリーを学ぼう
Webデザインのセオリーを学ぼうWebデザインのセオリーを学ぼう
Webデザインのセオリーを学ぼうToshiaki Sasaki
 

En vedette (12)

Framerで始めるプロトタイプコーディング
Framerで始めるプロトタイプコーディングFramerで始めるプロトタイプコーディング
Framerで始めるプロトタイプコーディング
 
インターネットってなんだろう?
インターネットってなんだろう?インターネットってなんだろう?
インターネットってなんだろう?
 
Vimから見たemacs
Vimから見たemacsVimから見たemacs
Vimから見たemacs
 
JavaScriptによるvideo audio要素のコントロール入門
JavaScriptによるvideo audio要素のコントロール入門JavaScriptによるvideo audio要素のコントロール入門
JavaScriptによるvideo audio要素のコントロール入門
 
Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-
Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-
Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-
 
スマホアプリ開発-プロモーション・集客・サポート・広告収入-
スマホアプリ開発-プロモーション・集客・サポート・広告収入-スマホアプリ開発-プロモーション・集客・サポート・広告収入-
スマホアプリ開発-プロモーション・集客・サポート・広告収入-
 
Ajax非同期通信によるサーバー通信
Ajax非同期通信によるサーバー通信Ajax非同期通信によるサーバー通信
Ajax非同期通信によるサーバー通信
 
JavaScriptによるgoogle maps apiの使い方
JavaScriptによるgoogle maps apiの使い方JavaScriptによるgoogle maps apiの使い方
JavaScriptによるgoogle maps apiの使い方
 
JavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
JavaScriptのオブジェクト:Mathオブジェクト、DateオブジェクトJavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
JavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
 
JavaScript Basic 02 jQuery
JavaScript Basic 02 jQueryJavaScript Basic 02 jQuery
JavaScript Basic 02 jQuery
 
JavaScript Basic 01
JavaScript Basic 01JavaScript Basic 01
JavaScript Basic 01
 
Webデザインのセオリーを学ぼう
Webデザインのセオリーを学ぼうWebデザインのセオリーを学ぼう
Webデザインのセオリーを学ぼう
 

Similaire à Canvasでペイントアプリ作成

UX on HTML5 x Touch UI
UX on HTML5 x Touch UIUX on HTML5 x Touch UI
UX on HTML5 x Touch UIdsuke Takaoka
 
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。ssusere75907
 
Meetup tokyo.20120924
Meetup tokyo.20120924Meetup tokyo.20120924
Meetup tokyo.20120924Kosuke Isobe
 
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介 デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介 Fumiya Sakai
 
wxPython入門(大阪Pythonユーザの集まり2014/03)
wxPython入門(大阪Pythonユーザの集まり2014/03)wxPython入門(大阪Pythonユーザの集まり2014/03)
wxPython入門(大阪Pythonユーザの集まり2014/03)泰 増田
 
iOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitiOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitShingo Hiraya
 
Silverlightで作るマルチタッチアプリケーション 2
Silverlightで作るマルチタッチアプリケーション 2Silverlightで作るマルチタッチアプリケーション 2
Silverlightで作るマルチタッチアプリケーション 2Yoshitaka Seo
 

Similaire à Canvasでペイントアプリ作成 (8)

UX on HTML5 x Touch UI
UX on HTML5 x Touch UIUX on HTML5 x Touch UI
UX on HTML5 x Touch UI
 
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
個人開発したモバイルアプリを紹介したパワポ資料です。転職活動時にポートフォリオとして使用しました。
 
Swift Study Vol.4
Swift Study Vol.4Swift Study Vol.4
Swift Study Vol.4
 
Meetup tokyo.20120924
Meetup tokyo.20120924Meetup tokyo.20120924
Meetup tokyo.20120924
 
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介 デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
デザイナーと一緒にコラボして仕上げるアニメーション実装とショーケース紹介
 
wxPython入門(大阪Pythonユーザの集まり2014/03)
wxPython入門(大阪Pythonユーザの集まり2014/03)wxPython入門(大阪Pythonユーザの集まり2014/03)
wxPython入門(大阪Pythonユーザの集まり2014/03)
 
iOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitiOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKit
 
Silverlightで作るマルチタッチアプリケーション 2
Silverlightで作るマルチタッチアプリケーション 2Silverlightで作るマルチタッチアプリケーション 2
Silverlightで作るマルチタッチアプリケーション 2
 

Plus de Yossy Taka

WebサイトへのYotutube動画の設置
WebサイトへのYotutube動画の設置WebサイトへのYotutube動画の設置
WebサイトへのYotutube動画の設置Yossy Taka
 
Bracketsを使おう
Bracketsを使おうBracketsを使おう
Bracketsを使おうYossy Taka
 
JavaScript 基礎文法のまとめ
JavaScript 基礎文法のまとめJavaScript 基礎文法のまとめ
JavaScript 基礎文法のまとめYossy Taka
 
canvasによるアナログ時計の作成
canvasによるアナログ時計の作成canvasによるアナログ時計の作成
canvasによるアナログ時計の作成Yossy Taka
 
ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-
ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-
ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-Yossy Taka
 
Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語Yossy Taka
 
WebデザイナのためのjQuery入門。
WebデザイナのためのjQuery入門。WebデザイナのためのjQuery入門。
WebデザイナのためのjQuery入門。Yossy Taka
 
JavaScript04 jquery プラグインを使おう
JavaScript04 jquery プラグインを使おうJavaScript04 jquery プラグインを使おう
JavaScript04 jquery プラグインを使おうYossy Taka
 
JavaScript basic, jQuery animation
JavaScript basic, jQuery animationJavaScript basic, jQuery animation
JavaScript basic, jQuery animationYossy Taka
 
Webデザイン入門1-HTML5・CSSについて-
Webデザイン入門1-HTML5・CSSについて-Webデザイン入門1-HTML5・CSSについて-
Webデザイン入門1-HTML5・CSSについて-Yossy Taka
 

Plus de Yossy Taka (10)

WebサイトへのYotutube動画の設置
WebサイトへのYotutube動画の設置WebサイトへのYotutube動画の設置
WebサイトへのYotutube動画の設置
 
Bracketsを使おう
Bracketsを使おうBracketsを使おう
Bracketsを使おう
 
JavaScript 基礎文法のまとめ
JavaScript 基礎文法のまとめJavaScript 基礎文法のまとめ
JavaScript 基礎文法のまとめ
 
canvasによるアナログ時計の作成
canvasによるアナログ時計の作成canvasによるアナログ時計の作成
canvasによるアナログ時計の作成
 
ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-
ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-
ハイブリッドアプリについて-PhoneGapアプリ制作の入り口-
 
Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語
 
WebデザイナのためのjQuery入門。
WebデザイナのためのjQuery入門。WebデザイナのためのjQuery入門。
WebデザイナのためのjQuery入門。
 
JavaScript04 jquery プラグインを使おう
JavaScript04 jquery プラグインを使おうJavaScript04 jquery プラグインを使おう
JavaScript04 jquery プラグインを使おう
 
JavaScript basic, jQuery animation
JavaScript basic, jQuery animationJavaScript basic, jQuery animation
JavaScript basic, jQuery animation
 
Webデザイン入門1-HTML5・CSSについて-
Webデザイン入門1-HTML5・CSSについて-Webデザイン入門1-HTML5・CSSについて-
Webデザイン入門1-HTML5・CSSについて-
 

Dernier

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 

Dernier (12)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

Canvasでペイントアプリ作成

  • 2. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 2 今回の講義内容 • Canvasの描画機能を利用して、ペイン トソフトを作成 – マウス操作とcanvasの‘線’を利用してペイ ント機能を実装 – タッチ操作で同様の機能を実装 – マウスとタッチの両方動作するようにする
  • 3. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 3 完成イメージ カラー変更 太さ変更 画面クリア 保存
  • 4. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 4 作業内容の基本 • 線の描画 – 作成する基本的な内容は、 マウス(指)を動かしている時に、マウス座標に 線を描画する だけです。
  • 5. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 5 まずは、線を描画してみましょう。 ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x, y); ctx.stroke(); moveTo (0,0) lineTo (100,100) moveTo (300,100) lineTo (400, 0)
  • 6. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 6 ペイントの基本仕様 • Canvasのサイズ – 縦幅:画面縦幅の半分 – 横幅:画面横幅に合わせる • 背景用四角形の描画 – Canvasと同じサイズ、塗り白色の四角形を描画 • Canvas上の操作 – タッチ、マウスの両方で動作可 • ペンの初期値 – 太さ:2px – 色:赤色
  • 7. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 7 ペイントの基本仕様 • Canvasのサイズ – 縦幅:画面縦幅の半分 – 横幅:画面横幅に合わせる • 背景用四角形の描画 – Canvasと同じサイズ、塗り白色の四角形を描画 • Canvas上の操作 – タッチ、マウスの両方で動作可 • ペンの初期値 – 太さ:2px – 色:赤色 課題
  • 8. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 8 描画操作の流れ • touchstart / mousedown(画面をタッチ・マウスダウンした時) – 線の色や太さを指定する – タッチした座標で moveTo() – ? • touchmove / mousemove(画面上をドラッグした時) – 移動後の座標で lineTo() – stroke() する • touchend / mouseup(画面から指・マウスを離した時) – ?
  • 9. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 9 まずはPC用に マウス操作
  • 10. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 10 ユーザ入力による制御 • マウスなどのユーザ操作(イベント)の制御方法 記述例 対象要素.addEventListener( ’ユーザ操作’, function(e){ 実行したい内容; });
  • 11. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 11 マウス操作 • 主なマウスイベント(ユーザ操作) – click クリック – dblclick ダブルクリック – mouseout 要素上からマウスが離れた – mouseover 要素上にマウスが乗った – mousedown マウスボタン押した – mouseup マウスボタンを離した – mousemove マウスが動いた • マウス座標の取得(引数を利用) – e.pageX : マウスポインタがある X 座標 – e.pageY : マウスポインタがある Y 座標
  • 12. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 12 マウス操作 • 下記のイベントの違いを確認しよう – click クリック – mousedown マウスボタンを押した – mouseup マウスボタンを離した
  • 13. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 13 動きが変!
  • 14. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 14 描画操作の流れ • touchstart / mousedown(画面をタッチ・マウスダウンした時) – 線の色や太さを指定する – タッチした座標で moveTo() – 描画開始したことを覚える(フラグ) • touchmove / mousemove(画面上をドラッグした時) – 移動後の座標で lineTo() – stroke() する • touchend / mouseup(画面から指・マウスを離した時) – 描画終了したことを覚える(フラグ)
  • 15. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 15 マウスダウン直後か どうか判断する
  • 16. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 16 If文と変数で 実現できます
  • 17. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 17 この変数を フラグと言います
  • 18. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 18 スマホ用に タッチ操作
  • 19. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 19 ユーザ操作 • タッチ操作 – touchstart : タッチしたとき – touchmove : タッチしたまま動かしたとき – touchend : タッチ状態から離れたとき • タッチ座標 – event.changedTouches[0].pageX : タッチされている画面位置の X 座標 – event.changedTouches[0].pageY : タッチされている画面位置の Y 座標
  • 20. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 20 共通のコードで 動作確認したい
  • 21. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 21 jQueryを使って 簡略化
  • 22. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 22 今回の使い方 • onを使う – onを使うと、複数同時にイベントを設定できる セレクタ.on(’操作1 操作2’, function(e){ 実行したい内容; });
  • 23. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 23 タッチ環境かどうか確認 • 確認方法 • 結果 – true だとタッチ環境、false だとマウス環境 – 上記を判断して、JSの記述を分岐する ('ontouchstart' in window)
  • 24. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 24 スマホのブラウザで 操作してみよう
  • 25. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 25 注意点 • クリックやタッチは、他のコンテンツでも 反応 – PCの場合:<a>タグなど – スマフォの場合:ページスクロールなど • 回避方法 – e.preventDefault()
  • 26. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 26 タッチすると 画面が青くなる
  • 27. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 27 タッチすると画面が青い • Androidのブラウザの仕様 – CSSで解決 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
  • 28. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 28 カラーの変更 • 赤、青、緑、黄、黒 – <ul><li>タグを利用して、CSSで背景色を指 定してボタンを作成 • 設定手段 – 各<li>タグを、touchstart / mousedown し たら、線の色を指定の色に変更する
  • 29. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 29 カラーの変更 • タッチ処理に、同じような設定が多くて 面倒 • 処理を一つにまとめたい – <li>タグの背景色をそのまま利用して、一つ の処理にまとめる
  • 30. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 30 ペンサイズの変更 • 線の太さを変更 – <ul><li>タグを利用して、2px、4px、6pxに 変更できるボタンを作成 • 設定手段 – 各<li>タグを、touchstart / mousedown し たら、線の太さを変更
  • 31. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 31 ペンサイズの変更 • タッチ処理に、同じような設定が多くて 面倒 • 処理を一つにまとめたい – <li>タグの文字をそのまま利用して、一つの 処理にまとめる
  • 32. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 32 クリアボタン • 画面を真っ白に変更 – <ul><li>タグを利用して、ボタンを作成 • 設定手段 – <li>タグを、touchstart / mousedown した ら、clearRectをして、白色の矩形を描画し 直す
  • 33. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 33 画像保存 • Canvasの問題点 – canvasのデータは、そのまま画像ファイルと して保存できない。 • 実現手段 – Imgタグとして表示して、ブラウザの機能で 保存する
  • 34. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 34 画像形式に変換 • canvasデータを画像形式に変換 – <ul><li>タグを利用してボタンを作成し、ボタ ンを押したら、変換したデータを<img>で表 示 • 変換方法 – canvas. toDataURL() • 画像のアドレスとして生成される • 生成されたアドレスを利用して、imgタグで表示 • HTML上に<div>タグを記述し、その中にimgタグ を追加する
  • 35. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 35 タグの生成方法 • タグの生成 オブジェクト名 = document.createElement(“タグ名”); • 属性の追加 オブジェクト名.属性名 = 値; • タグ内への文章追加 オブジェクト名. innerHTML = 値; • タグへのCSS指定 オブジェクト名. style.プロパティ = 値;
  • 36. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 36 タグの追加方法 • ID指定でのタグの追加 document.getElementById(“id名”).appendChild(オブジェクト名); • タグ指定でのタグ追加 var 親オブジェクト名 = document.getElementByTagName (“親タグ名”); 親オブジェクト名[何番目].appendChild (オブジェクト名);
  • 37. Copyright Ⓒ 2015 Yoshihiro Takahashi All Rights Reserved. 37 次回までの課題 • ボタンなどの見た目をデザインしてみよう • 可能であれば、オリジナル機能を追加してみよう。