HTML入門その18-タッチでお絵かき3

iPhoneとAndroid(nexus7)で動作確認しました.

<!DOCTYPE html>
<html>
<head>
<title>touch paint</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<!-- metaタグで スマホの挙動を制限している -->
</head>
<body>
<h1>Key2</h1>
<canvas id="myCanvas" width="300" height="300" style="border:1px solid #000000;"></canvas>

<script type="text/javascript">
var canvas;
var paintSwitch = false;
var oldX = 0;
var oldY = 0;

//---スマホのOS取得
var ua = navigator.userAgent;//User Agent(まぁ機種名みたいなの)を取得して変数uaに代入しなさい
//---


//以下iPhoneの時の挙動
if (ua.indexOf("iPad") >= 0 || ua.indexOf("iPhone") >= 0 || ua.indexOf("iPod") >= 0){
//特に挙動はまだ決めていない
}

//以下Androidの時の挙動
if (ua.indexOf("Android") >= 0){
//特に挙動はまだ決めていない
}


//---------
window.onload = function() {//これ読み込んだ時に,,,
 syokika();//syokikaを実行してね
};

function syokika(){//で,これがsyokikaね
canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");

//--ここからPCのマウス入力の挙動(タッチが動作しているか確認のため以下3行コメントアウトしてますがPCで動作させる場合はコメントアウトを外してください
//canvas.addEventListener("mousemove", draw, true);
//canvas.addEventListener("mousedown", myMove, false);
//canvas.addEventListener("mouseup", myMouseUp, false);

//--ここからスマホのタッチの挙動<−NEW!!
canvas.addEventListener("touchmove",myTouchDraw,false);
canvas.addEventListener("touchstart",myTouchStart,false);
canvas.addEventListener("touchend",myTouchEnd,false);
}

//--PCのマウス入力時の挙動
function myMove(atai){
        paintSwitch = true;
		
		oldX = atai.clientX - canvas.offsetLeft;//オフセット(ずれ)の修正=よこ
        oldY = atai.clientY - canvas.offsetTop;//オフセット(ずれ)の修正=たて
}

function myMouseUp(){
		paintSwitch = false;
}
//--PCの挙動ここまで

//--タッチの挙動ここから
function myTouchStart(atai){
        paintSwitch = true;
        oldX = atai.touches[0].pageX - canvas.offsetLeft;//オフセット(ずれ)の修正=よこ
        oldY = atai.touches[0].pageY - canvas.offsetTop;//オフセット(ずれ)の修正=たて
}

function myTouchEnd(){
		paintSwitch = false;
}
//--タッチの挙動ここまで


//setInterval(draw, 10);//10msec起きに描いてね

function draw(atai) {
if (!paintSwitch) return;
	var x = atai.clientX - canvas.offsetLeft;
    var y = atai.clientY - canvas.offsetTop;
    //var can = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
    context.strokeStyle = "rgba(255,0,0,1)";
    context.lineWidth = 1;
    context.beginPath();
    context.moveTo(oldX, oldY);
    context.lineTo(x, y);
    context.stroke();
    context.closePath();
    oldX = x;
    oldY = y;
}

function myTouchDraw(atai) {
if (!paintSwitch) return;
	atai.preventDefault();//これすると縦スクロールがなくなる
	var x = atai.touches[0].pageX - canvas.offsetLeft;//なんかタッチの場合はpageXじゃないとだめ
    var y = atai.touches[0].pageY - canvas.offsetTop;//なんかタッチの場合はpageYじゃないとだめ
    //var can = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
    context.strokeStyle = "rgba(255,0,0,1)";//16進数でなくこういう描き方もあります aはアルファ=透明チャンネル
	//context.strokeStyle = "rgb(255,0,0)";//アルファでなくてもOK
    context.lineWidth = 1;//線の太さ
    context.beginPath();//線を描き始めます
    context.moveTo(oldX, oldY);//この点から
    context.lineTo(x, y);//この点まで
    context.stroke();//描いてね
    context.closePath();//線はここまで
    oldX = x;
    oldY = y;
}


//---画像に変換ボタンを押すとここにfunctionが実行される
function screenshot(){
  var myimage = canvas.toDataURL();
  
  //以下iPhoneの時の挙動 上の方で機種をグローバル変数uaに入れてあるのでifで機種が分かる
if (ua.indexOf("iPad") >= 0 || ua.indexOf("iPhone") >= 0 || ua.indexOf("iPod") >= 0){
  document.getElementById("newImg").src = myimage;//newImgeというIDを探してPNG入れてね
}

  
//以下Androidの時の挙動 上の方で機種をグローバル変数uaに入れてあるのでifで機種が分かる
if (ua.indexOf("Android") >= 0){
    //androimageというiDがあるimgタグのソース(URL入れるところ)に入れちゃう
    document.getElementById("androimage").src = myimage;
}

    

}
//---

</script>

<form>
<input type="button" value="画像に変換" onclick="screenshot()">
<!-- onclickでscreenshotというfunction実行してね -->
</form>
<div><img id="newImg"></div>
</ br>
<!-- このDIVのIDを探してここに画像を入れる -->
<img src="" id="androimage" width="300" height="300">

</body>
</html>

102行目に縦スクロールロックを入れてあります

120〜138行目は「画像に変換」ボタンを押したときに実行されます.ifを使ってAndroidとiPhoneの時の挙動を分けています.