It's an attribute that specifies the event to be executed the instant the user releases the mouse button after pressing it.
onmouseup属性は、ユーザーがマウスボタンを押し下げた後に「離した瞬間」に発生するイベント(mouseupイベント)に対して、実行するスクリプトを指定するためのHTML属性です。つまり、ある要素でマウスボタンを押した後に指を離したタイミングで何らかの処理を行いたい場合に便利です。
HTML
<button onmouseup="alert('マウスボタンが離されました')">
クリック(ボタンを離すとアラート)
</button>
上記の例では、ボタン上でマウスボタンを押した後に離すと、アラートが表示されます。
マウスボタンが押下(onmousedown)されている状態から、指がボタンから離れた(onmouseup)という動作を監視し、その瞬間にイベントを発生させるのがonmouseup属性です。多くの場合、以下のような流れが考えられます。
たとえばドラッグ&ドロップ機能では、「ドラッグ開始」時にonmousedownが発火し、「ドラッグ終了」時にonmouseupを検出して処理を行うことが多いです。
テキストエリアなどの要素で文字列を選択した後、マウスボタンを離した瞬間にイベントを発火して選択した文字列を取得する例です。
この段落をマウスドラッグして文字を選択し、マウスボタンを離すと選択された文字列がアラート表示されます。
HTML
<p onmouseup="showSelectedText()">
この段落をマウスドラッグして文字を選択し、マウスボタンを離すと選択された文字列がアラート表示されます。
</p>
<script>
function showSelectedText() {
const selectedText = window.getSelection().toString();
if (selectedText) {
alert(`選択されたテキスト: ${selectedText}`);
}
}
</script>
window.getSelection()
を使うと、ユーザーが選択したテキストを取得できます。onmouseup
で文字の選択が完了したタイミングを検知するために利用します。イベントには類似のものが複数存在します。ここではonmouseupと組み合わせてよく使われるいくつかのイベントを簡単に比較します。
onmouseupは、ユーザーがマウスボタンを「離した」というアクションに特化したイベントです。onclickとは異なり、単純な「押して離す」動作だけでなく、押して移動(ドラッグ)してから離す、という動作に対しても確実に実行されます。
マウスイベントが発生した際には、JavaScriptのMouseEventオブジェクトが引数として渡されます。onmouseupをHTML属性で直接定義する場合も、イベントハンドラ側でeventを受け取ることで座標情報などを取得できます。たとえば、以下のように書けます。
HTML
<button onmouseup="mouseUpHandler(event)">
マウスアップイベントを検出
</button>
<script>
function mouseUpHandler(e) {
// クリックされた座標
const x = e.clientX;
const y = e.clientY;
alert(`mouseup: マウスポインタが離された位置 (${x}, ${y})`);
}
</script>
MouseEventオブジェクトで取得できる主なプロパティ
こういった情報を組み合わせることで、より高度なユーザー操作を実装できます。
HTML属性で直接onmouseup
を書く方法以外に、JavaScriptのaddEventListener()
を利用してイベントを設定する方法もあります。たとえば以下のように書きます。
HTML
<button id="myButton">マウスアップ検出</button>
<script>
const btn = document.getElementById('myButton');
btn.addEventListener('mouseup', function(e) {
console.log('マウスボタンが離されました');
console.log('イベントオブジェクト:', e);
});
</script>
主なメリット
HTML属性のonmouseup
は小規模なスクリプトを直接書く場合にシンプルですが、大規模開発ではaddEventListener()
を使うことが一般的です。
マウスを押したタイミングで「ドラッグ開始」、動かしている間は「要素の位置を追従」、離したとき(onmouseup)に「ドラッグ終了」という流れを実装できます。
HTML
<div id="draggable">ドラッグできます</div>
<script>
const box = document.getElementById("draggable");
let isDragging = false;
let offsetX, offsetY;
box.addEventListener("mousedown", (event) => {
isDragging = true;
// 要素の左上とマウスの座標の差分を保存
offsetX = event.clientX - box.offsetLeft;
offsetY = event.clientY - box.offsetTop;
});
document.addEventListener("mousemove", (event) => {
if (isDragging) {
box.style.left = (event.clientX - offsetX) + "px";
box.style.top = (event.clientY - offsetY) + "px";
}
});
document.addEventListener("mouseup", (event) => {
if (isDragging) {
isDragging = false;
console.log("ドラッグ終了");
}
});
</script>
CSS
#draggable {
width: 100px;
height: 100px;
background-color: lightblue;
position: absolute;
cursor: move;
top: 20px;
left: 20px;
}
onmouseup
イベントをdocument
全体で検知し、マウスを離したらドラッグ状態をfalseに戻します。HTML5の<canvas>
要素上でお絵かきする場合など、押下(onmousedown)しながら移動(onmousemove)で線を描き、離した(onmouseup)タイミングでパスを終了する実装にも役立ちます。
document
に対してつける方法などがあります。ドラッグが要素の外に移動する可能性がある場合は、document
に対してmouseupをバインドするほうが安全です。removeEventListener()
を使って一時的にリスナーを解除するアプローチがあります。keydown
やkeyup
などのイベントが該当するので、必要に応じてフォールバックを用意します。A. 両方を一つの要素に設定することは可能ですが、それぞれ発火するタイミングが異なるので、ロジックを整理して重複処理が起こらないように注意しましょう。一般的にクリックだけを処理したいのであればonclickを使い、ドラッグなど複雑な操作を扱いたい場合にonmousedownとonmouseupを組み合わせるのが良いでしょう。
A. 呼び出されます。ただし右クリック時はデフォルト動作としてコンテキストメニューが表示されるため、イベントの扱い方によっては意図しない挙動になることがあります。カスタムの右クリックメニューを出したい場合などは、contextmenu
イベントを使用し、デフォルト動作をキャンセルすることも検討してください。
A. 通常、ブラウザウィンドウの外でマウスボタンを離すと、要素に対してはonmouseupイベントが発火しない可能性が高いです。ドラッグ操作などで正しく離したことを検知したい場合は、document
やwindow
に対してマウスイベントを付与しておくと安全です。
onmouseup属性は、マウスボタンが「離された」タイミングを捉える重要なイベントです。クリックやドラッグ&ドロップなど、多くのユーザー操作の終了状態を検知するのに役立ちます。
onmouseup="~"
またはJavaScriptのaddEventListener('mouseup', ~)
を使う初心者の方は、まずはシンプルなクリック操作などで発火タイミングを確認し、動きを把握してみましょう。中級者以上の方はドラッグ操作やキャンバス上での描画処理など、より複雑なインタラクションでの活用方法を検討してみてください。onmouseupと関連イベントを組み合わせれば、マウスを使った豊富なUIを実現できます。