マウス
解説/アルゴリズム
ブラウザでマウスを扱うために、TypeScript からクリックやオーバーのようなイベント、どのボタンが押されたか、キーとの連携などが取得できる。
マウスイベント
| イベント名 | 発生する条件 |
|---|---|
| mousedown | 要素上でマウスボタンが押された |
| mouseup | 要素上でマウスボタンが離された |
| mouseover | 外から要素内にマウスポイントが入ってきた |
| mouseout | 要素内から外にマウスポイントが出た |
| mousemove | 要素上でマウスが動かされた |
| click | 要素上でマウスボタンがクリックされた |
| contextmenu | 要素上で右マウスボタンが押された |
| dblclick | 要素上でマウスボタンがダブルクリックされた |
document.addEventListener("mousedown", () => {
// 画面のどこかでマウスボタンが押されたときに呼ばれる
console.log(1);
});
const container = document.getElementById("container");
container.addEventListener("click", () => {
// idがcontainerの要素上でクリックされたときに呼ばれる
console.log(2);
});
マウスイベントを受け取りたい要素に addEventListener で、イベント名とコールバックで呼ばれる関数を登録する。
on ~
document.onmousedown = () => {
// 画面のどこかでマウスボタンが押されたときに呼ばれる
};
const container = document.getElementById("container");
container.onclick = () => {
// idがcontainerの要素上でクリックされたときに呼ばれる
};
要素には onmousedown や onclick のような、 on{イベント名} というイベントハンドラがあり、これを利用すると addEventListener を使わず簡潔に記述することができる。
ただしイベントハンドラに指定できる関数は一つだけになる。
<button onclick="alert(123);"></button>
<div class="container" onclick="alert(456);"></div>
on ~系のイベントハンドラは要素の属性でもあるので、HTML から直接記述することができる。
マウスイベントの補足
mouseup は対象の要素外でマウスボタンが押された状態で、対象の要素上に移動し、そこで離された場合でもイベントが発生する。
click は対象の要素外でマウスボタンが押された状態で、対象の要素上に移動し、そこで離された場合、イベントが発生しない。
どのボタンが押されたか
document.onmousedown = (event: MouseEvent) => {
console.log(event.which);
};
MouseEvent の which プロパティからどのボタンが押されたかを数値として確認できる。
| ボタン | which |
|---|---|
| 左ボタン | 1 |
| 中央ボタン | 2 |
| 右ボタン | 3 |
キーとの連動
document.onmousedown = (event: MouseEvent) => {
if (event.shiftKey && event.ctrlKey) {
// ShiftキーとCtrlキーを押しながら該当のマウスイベントが発生した場合
}
};
マウスイベント発生時に特定のキーが押されていたかを確認できる。
| プロパティ | キー |
|---|---|
| shiftKey | Shift キー |
| ctrlKey | Ctrl キー |
| altKey | Alt キー |
| metaKey | Meta キー |
マウス位置
document.onmousemove = (event: MouseEvent) => {
console.log(event.pageX, event.pageY);
console.log(event.clientX, event.clientY);
};
(pageX, pageY), (clientX, clientY) ともにマウス位置を返すプロパティだが、スクロールされているときに返す値の違いが出る。

pageY はページ最上部からマウスポインタがある位置までの距離だが、 clientY は今ブラウザに表示されている領域最上部からの距離を返す。
x 軸である pageX / clientX も同様となる。