最初に思い描いたイメージは、こんな感じでJavaScriptを使ってcanvasに絵を描くイメージ。
そして出来上がったのがこんな感じ・・・
これはこれで面白いといえば面白い。しかも何の役にも立たない。
だいたい何か作ろうとするとイメージとは違うものが最初に出来上がるものだ。
わたしが作るものは何でもそうだ。
JavaScriptのマウスイベントには、マウスを押したとき(押した状態のとき)とマウスを離したとき(押した後に元に戻したとき)のイベントが発生していることが分かった。マウスを動かしているときもイベントが発生しているようだ。しかし、マウスを動かしているときのイベントは、かなり精度が低いように感じた。描いた絵がカクカクしている。細かい絵はかけそうもない。(わたしの画力にとっては最適であるが)
ウインドウズに付属のペイントは、あらためて凄いソフトだと感じる。
ダメなブログラム
/* * グローバル変数 */ var $id = function(id){ return document.getElementById(id); }; var canvas = null; // キャンバス var g = null; // コンテキスト var mouse = { x: null, y:null }; // マウスの現在位置 var endMouse = { x: null, y:null }; // 終了座標 var startMouse = { x: null, y:null }; // 開始座標 var drawFlag = false; // フラグ:マウスが押されているとき絵を描く /* メイン処理 */ window.onload = function() { canvas = $id("canvas"); g = canvas.getContext("2d"); // 初期化 init(); // 要素の上でマウスが動いた際の処理 canvas.addEventListener("mousemove", function(e){ // マウス位置を更新 getMousePosOnElement(e); // 描画 if(drawFlag) draw(); startMouse.x = mouse.x; startMouse.y = mouse.y; }, false); // キャンバスでマウスを押したときの処理 canvas.addEventListener("mousedown", function(e){ drawFlag = true; // マウス位置を更新 getMousePosOnElement(e); startMouse.x = mouse.x; startMouse.y = mouse.y; }, false); // キャンバスでマウスを離したときの処理 canvas.addEventListener("mouseup", function(e){ drawFlag = false; // マウス位置を更新 getMousePosOnElement(e); endMouse.x = mouse.x; endMouse.y = mouse.y; }, false); // キャンバスでダブルクリックしたときの処理 canvas.addEventListener("dblclick", function(e){ drawFlag = false; // クリア g.clearRect(0, 0, canvas.width, canvas.height); // 情報表示 g.fillStyle = "rgba(255, 0, 0, 1.0)"; g.fillText("マウスを押したままで描画/ダブルクリックで消去", 16, 16); }, false); }; /* * マウス位置を取得 */ var getMousePosOnElement = function(e){ var rect = e.target.getBoundingClientRect(); mouse.x = e.clientX - rect.left; mouse.y = e.clientY - rect.top; return mouse; }; /* * 円を描く */ var draw = function(){ // クリア // g.clearRect(0, 0, canvas.width, canvas.height); // 線を引く g.strokeStyle = "rgba(0, 50, 200, 1.0)"; g.beginPath(); g.moveTo(startMouse.x, startMouse.y); g.lineTo(endMouse.x, endMouse.y); g.stroke(); g.closePath(); // 情報表示 g.fillStyle = "rgba(255, 0, 0, 1.0)"; g.fillText("マウスを押したままで描画/ダブルクリックで消去", 16, 16); }; /* * 初期化処理 */ var init = function(e){ // マウス位置を更新 // getMousePosOnElement(e); startMouse.x = mouse.x; startMouse.y = mouse.y; draw(); };
コメント