網路常都會看到網頁版小畫家之類的東西,可以用滑鼠來繪圖

所以就試試在行動裝置上用觸控的方式實作繪圖

HTML:

<body>
	<canvas id="sign" width="1000" height="1000">
		Your browser does not have support for Canvas. 
	</canvas>
	<input type="button" value="清空" id="clear" />
</body>

Javascript:

$(document).ready(function(){
	//起始點位置
	var pp = [-1,-1];
	//下一個點的位置
	var np = [0,0];
	//button物件
	var bu = document.getElementById('clear');
	//canvas物件
	var canvas  = document.getElementById('sign');
	//2維繪圖
	var ctx = canvas.getContext("2d");
	//線條寬度
	ctx.lineWidth = 25;
	//線條顏色
	ctx.strokeStyle = "red";
	
	//關閉原本瀏覽器的兩指縮放、拖拉捲動操作的干擾
	document.body.addEventListener('touchmove', function (e) {
        e.preventDefault();
    }, false);
	
	
	//使用addEventListener的好處是,當我有相同的觸發事件時,就不會被蓋掉
	//touchstart
	canvas.addEventListener('touchstart', function(e) {
		//每次觸發一次touch就換一次顏色
		ctx.strokeStyle = ctx.strokeStyle == "red" ? ("green") : ("red");
	}, false);
	
	//touchmove
	canvas.addEventListener('touchmove', function(e) {
		var touches = e.touches;
		//如果是剛下筆(手),會先初始化起始點
		if( pp[0] == -1 && pp[1] == -1 ){ 
			pp = [touches[0].pageX,touches[0].pageY]; 
		}
		//紀錄下一點的位置
		np = [touches[0].pageX,touches[0].pageY];
		
		//繪圖
		ctx.beginPath();
		ctx.moveTo(pp[0], pp[1]);
		ctx.lineTo(np[0],np[1]);
		ctx.closePath();
		ctx.stroke();
		//下一點的位置=新的起始點
		pp[0] = np[0];
		pp[1] = np[1];
	}, false);
	
	//touchend
	canvas.addEventListener('touchend', function(e) {
		//起始點歸零
		pp = [-1,-1];
	}, false);
	
	//清除canvas畫面
	bu.onclick = function(){  clearCanvas();   };
	
	function clearCanvas() {
		ctx.clearRect(0, 0, canvas.width, canvas.height);
    }
});
Categories: JavaScript