マウスを動かした時(mousemove)、マウスボタンを押した時(mousedown)、マウスボタンを離した時(mouseup)をそれぞれチェックしキャンバスに状態を表示する。
例)マウスボタンを押した時
x: 74 y:178 押した!
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>キャンバスでのマウスイベントチェック</title>
<style>
*{
margin: 0;
padding: 0;
}
body{
margin: 0 50px;
}
</style>
<script src="main.js" type="text/javascript"></script>
</head>
<body>
<canvas id="canvas" width="512" height="512"></canvas>
</body>
</html>
main.js
let canvas = null;
let g = null;
let pos = {x:0, y:0}; // キャンバス上のマウス座標
let isMouseDown = false; // マウスを押しているか?
/*
* マウスを動かしている時の処理
*/
const mouseMoveListener = (e) => {
// オフセット位置:キャンバスがブラウザの左上からどれくらいの位置にあるか?(rect.left, rect.top)
const rect = e.target.getBoundingClientRect();
// e.clientXとe.clientYはブラウザ左上からのキャンバスクリック位置なのでオフセット分を引くとキャンバス上の座標が分かる
pos.x = e.clientX - rect.left;
pos.y = e.clientY - rect.top;
drawCanvas();
};
/*
* マウスボタンを押した時の処理
*/
const mouseDownListener = () => {
isMouseDown = true;
drawCanvas();
};
/*
* マウスボタンを離した時の処理
*/
const mouseUpListener = () => {
isMouseDown = false;
drawCanvas();
};
/*
* キャンバスにマウス情報を表示
*/
const drawCanvas = ()=> {
// キャンバスを空色でクリアする
g.fillStyle = "skyblue";
g.fillRect(0, 0, canvas.width, canvas.height);
// 表示する文字列を設定
const mouseDownString = isMouseDown ? "押した!" : "離した!";
const txtPos = `x: ${pos.x} y:${pos.y} ${mouseDownString}`;
// マウス情報を表示する
g.fillStyle = "#555";
g.fillText(txtPos, 150, canvas.height/2);
}
/*
* 起動時の処理
*/
window.addEventListener("load", ()=>{
canvas = document.getElementById("canvas");
g = canvas.getContext("2d");
g.font = "bold 24px System"; // フォントサイズ・フォント種類 設定
drawCanvas(); // マウス情報を表示
// マウスイベント設定
canvas.addEventListener("mousemove", mouseMoveListener, false);
canvas.addEventListener("mousedown", mouseDownListener, false);
canvas.addEventListener("mouseup", mouseUpListener, false);
});
コメント