カテゴリ: React 更新日: 2026/01/31

Reactでマウスイベントを活用する方法!onMouseEnter, onMouseLeave, onMouseMoveを初心者向けに解説

マウスイベント(onMouseEnter, onMouseLeave, onMouseMove)の使い方
マウスイベント(onMouseEnter, onMouseLeave, onMouseMove)の使い方

先生と生徒の会話形式で理解しよう

生徒

「Reactでマウスが乗ったり動いたりした時に反応させたいです。」

先生

「その場合は、onMouseEnteronMouseLeaveonMouseMoveというイベントハンドラを使います。」

生徒

「それぞれどんなタイミングで反応するんですか?」

先生

「簡単に言うと、マウスが要素に乗った瞬間がonMouseEnter、要素から離れた瞬間がonMouseLeave、マウスが要素内で動いている間はonMouseMoveです。」

生徒

「なるほど!ではどうやって使うんですか?」

先生

「それでは実際にコードで見ていきましょう!」

1. onMouseEnterとonMouseLeaveの基本

1. onMouseEnterとonMouseLeaveの基本
1. onMouseEnterとonMouseLeaveの基本

Reactでマウスイベントを使うと、ユーザーがマウスを要素に乗せたり離したりしたときに処理を実行できます。onMouseEnterはマウスが要素に入った瞬間に発火し、onMouseLeaveは要素から離れた瞬間に発火します。


import React, { useState } from "react";

function App() {
  const [hover, setHover] = useState(false);

  return (
    <div
      onMouseEnter={() => setHover(true)}
      onMouseLeave={() => setHover(false)}
      style={{
        width: "200px",
        height: "100px",
        backgroundColor: hover ? "lightblue" : "lightgray",
        display: "flex",
        justifyContent: "center",
        alignItems: "center",
        border: "1px solid #000"
      }}
    >
      {hover ? "マウスが乗っています!" : "ここにマウスを乗せてください"}
    </div>
  );
}

export default App;
(マウスをボックスに乗せると背景色が変わり、テキストが切り替わります)

2. onMouseMoveでマウスの位置を取得する

2. onMouseMoveでマウスの位置を取得する
2. onMouseMoveでマウスの位置を取得する

onMouseMoveはマウスが要素の上で動くたびに発火します。event.clientXevent.clientYを使うと、画面上でのマウスの座標を取得できます。これにより、マウスの位置に応じたアニメーションやエフェクトを作ることができます。


import React, { useState } from "react";

function App() {
  const [position, setPosition] = useState({ x: 0, y: 0 });

  const handleMouseMove = (event) => {
    setPosition({ x: event.clientX, y: event.clientY });
  };

  return (
    <div
      onMouseMove={handleMouseMove}
      style={{
        width: "300px",
        height: "150px",
        border: "1px solid #000",
        position: "relative"
      }}
    >
      <p>マウスの位置: X: {position.x}, Y: {position.y}</p>
    </div>
  );
}

export default App;
(マウスをボックス内で動かすと、画面にマウスの座標がリアルタイムで表示されます)

3. 実践的な活用例と注意点

3. 実践的な活用例と注意点
3. 実践的な活用例と注意点

マウスイベントは、ボタンや画像のホバーエフェクト、ドラッグ操作、ゲーム操作など、ユーザーの操作に応じて反応させるのに便利です。onMouseEnteronMouseLeaveを使えば、ホバー時のスタイル変更やメッセージ表示が簡単にできます。また、onMouseMoveを活用すると、マウスの座標に応じたアニメーションやカスタムカーソルの実装も可能です。

注意点として、onMouseMoveは発火回数が多いため、処理が重いとパフォーマンスに影響する場合があります。必要に応じて、デバウンスやスロットリングを使って負荷を調整すると良いでしょう。Reactのマウスイベントをうまく活用して、ユーザーに直感的で動的な操作体験を提供しましょう。

4. クリックとホバーを組み合わせたインタラクション例

4. クリックとホバーを組み合わせたインタラクション例
4. クリックとホバーを組み合わせたインタラクション例

Reactでは、onMouseEnteronMouseLeaveなどのホバー系イベントに加えて、onClickを組み合わせることで、より視覚的なインタラクションを作ることができます。例えば、マウスを乗せると色が変わり、クリックするとテキストが変化するような表現です。こうしたUIはホバーエフェクトにクリック操作を加えることで、ユーザーにとって分かりやすい反応を返せます。


import React, { useState } from "react";

function HoverClickBox() {
  const [hover, setHover] = useState(false);
  const [clicked, setClicked] = useState(false);

  return (
    <div
      onMouseEnter={() => setHover(true)}
      onMouseLeave={() => setHover(false)}
      onClick={() => setClicked(!clicked)}
      style={{
        width: "200px",
        height: "120px",
        backgroundColor: hover ? "#c7e6ff" : "#ddd",
        border: "1px solid #333",
        display: "flex",
        justifyContent: "center",
        alignItems: "center",
        cursor: "pointer"
      }}
    >
      {clicked ? "クリックされました!" : hover ? "ホバー中です" : "マウスを乗せてね"}
    </div>
  );
}

export default HoverClickBox;
(マウスを乗せると背景色が変わり、クリックすると表示テキストが切り替わります)

5. マウスイベントでアニメーションをつける応用例

5. マウスイベントでアニメーションをつける応用例
5. マウスイベントでアニメーションをつける応用例

onMouseMoveはアニメーションとの相性が良く、簡単な動きならCSSとReactを組み合わせるだけで実現できます。マウスの動きに合わせて要素が追従するエフェクトや、カーソル位置に応じて影や色が変化する演出など、視覚的に豊かなUIを作ることができます。

下記は、マウスの位置によって丸いカーソル風のパーツが移動するシンプルな例です。動きのあるUIはユーザーの注目を引きやすく、インタラクションを強化します。


import React, { useState } from "react";

function FollowCursor() {
  const [pos, setPos] = useState({ x: 0, y: 0 });

  const handleMove = (e) => {
    setPos({ x: e.clientX, y: e.clientY });
  };

  return (
    <div 
      onMouseMove={handleMove}
      style={{ width: "100%", height: "200px", border: "1px solid #000" }}
    >
      <div
        style={{
          width: "20px",
          height: "20px",
          backgroundColor: "red",
          borderRadius: "50%",
          position: "absolute",
          transform: `translate(${pos.x}px, ${pos.y}px)`
        }}
      ></div>
    </div>
  );
}

export default FollowCursor;
(マウスに合わせて赤い丸が追従するように移動します)

6. マウスイベントが発火しない時のよくある原因と対処法

6. マウスイベントが発火しない時のよくある原因と対処法
6. マウスイベントが発火しない時のよくある原因と対処法

Reactのマウスイベントを使っていると、「イベントが発火しない」「意図した位置で反応しない」といった問題が起こることがあります。特に初心者がつまずきやすいポイントとして、以下のようなケースがあります。

  • 要素のサイズが小さすぎてマウスが乗っても反応していない
  • 透明な要素が前面にあり、本来の要素を覆っている
  • CSSのpointer-eventsが原因でイベントが無効化されている
  • positionの設定により想定外の場所が判定対象になっている

こうした問題が起きた場合は、まず要素のサイズやレイアウト、重なり順(z-index)を確認すると改善することが多いです。特に、テキストだけが配置されていてボックス要素がない場合、onMouseEnteronMouseLeaveが反応しにくくなることもあります。

下記のように、枠を明確に設定してデバッグすると、どの範囲でイベントが発火しているか理解しやすくなります。


<div
  onMouseEnter={() => console.log("enter")}
  onMouseLeave={() => console.log("leave")}
  style={{
    width: "250px",
    height: "120px",
    border: "2px dashed #333",
    backgroundColor: "#fafafa"
  }}
>
  デバッグ用のボックス
</div>
(マウスが出入りしたタイミングをコンソールで確認できます)

マウスイベントを正しく扱えるようになると、ユーザーがカーソルを動かした瞬間の細かな変化やアニメーションまで表現できるようになり、より高度で魅力的なインターフェースを作ることができます。

まとめ

まとめ
まとめ

Reactでのマウスイベント活用は、直感的なユーザーインターフェースを作る上で欠かせない重要な要素であり、特にonMouseEnterやonMouseLeaveそしてonMouseMoveなどの基本的なイベントは、ユーザー操作に応じた画面変化を実現するための基礎となります。実際にマウスが要素へ入る瞬間と離れる瞬間の視覚変化は、操作している感覚を強め、より自然なウェブ体験を形づくります。また、マウス移動に合わせて座標を取得することで、アニメーションやインタラクションを豊かにでき、動きのある反応は視覚的な心地よさを生み出します。

特に、画面上のマウス位置をリアルタイムに追跡する機能は、カーソルを活用した演出やデザイン性の高いコンポーネントを作る上で非常に大きな力を発揮します。たとえば、影がゆっくり動くエフェクトや要素がマウスを追尾する表現、ホバー中だけ色が切り替わる繊細なアニメーションは、いずれもonMouseMoveやonMouseEnterを組み合わせることで可能になります。Reactの描画処理は高速であり、ユーザー操作の細かな変化でも滑らかに反応させることができるため、インタラクティブな体験を強化しやすいという魅力があります。

また、ホバーとクリックを組み合わせる実装では、マウスイベントにより動的な状態変化を付与しながら、クリック時には内容が切り替わるような仕組みを自然に構築できます。このような構造はUIデザインにおいて非常に使われる技法であり、特に操作フィードバックを意識したコンポーネント作りに向いています。ボタンの色変化、画像の反転、メニューの開閉など、多くのWebアプリケーションが似た仕組みを用いています。

さらに、マウスイベントが発火しない場合の原因として、要素サイズが小さすぎる、見えないボックスが被っている、pointer-eventsが無効になっているなど、CSSレイアウトに起因するものが多く、視覚的には気づきにくい問題が発生することもあります。このような時は枠線を明確にしたり、要素の重なり順を確認することで問題点を切り分けることができます。こうした小さなデバッグの積み重ねにより、イベントの発火領域を正確に把握でき、より自然なインタラクションを提供できるようになります。

サンプルプログラムで復習


import React, { useState } from "react";

function ReviewHoverBox() {
  const [hover, setHover] = useState(false);
  const [pos, setPos] = useState({ x: 0, y: 0 });

  return (
    <div
      onMouseEnter={() => setHover(true)}
      onMouseLeave={() => setHover(false)}
      onMouseMove={(e) => setPos({ x: e.clientX, y: e.clientY })}
      style={{
        width: "260px",
        height: "140px",
        border: "2px solid #444",
        backgroundColor: hover ? "#d4ecff" : "#eee",
        display: "flex",
        flexDirection: "column",
        justifyContent: "center",
        alignItems: "center"
      }}
    >
      {hover ? "ほばーちゅう" : "まうすをのせてください"}
      <div>X: {pos.x} / Y: {pos.y}</div>
    </div>
  );
}

export default ReviewHoverBox;

このサンプルでは、onMouseEnterとonMouseLeaveにより背景色が切り替わり、onMouseMoveによってマウス座標が追跡されます。これらの基本的なマウスイベントを組み合わせるだけで、学習した内容をそのまま応用したコンポーネントが作れることがわかります。動きのある要素は利用者に安心感や直感的な操作性を提供し、単なる静的コンテンツでは味わえない魅力を生み出します。Reactが提供するイベントハンドラは扱いやすく、複雑な処理も段階的にまとめていくことで柔軟な表現へと発展させることができます。

先生と生徒の振り返り会話

生徒:「きょうの学習で、Reactのマウスイベントがどう動くかがよくわかりました。onMouseEnterとonMouseLeaveは本当に便利ですね。」

先生:「そうですね。特に視覚的な変化を与えるときにとても役立ちます。ユーザーに操作の手応えを伝えることができます。」

生徒:「onMouseMoveで座標を取得できるのもおもしろかったです。アニメーションや動きのあるUIに応用できそうです。」

先生:「そのとおりです。動きが加わると画面に躍動感が出て、より魅力的なインターフェースになりますね。学んだ内容を組み合わせれば、もっと高度な表現もできますよ。」

生徒:「きょうの復習サンプルもとても参考になりました。じっさいに自分のプロジェクトにも使ってみたいです。」

先生:「ぜひ試してみてください。マウスイベントは奥が深いですが、基本を押さえればどんどん活用できますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

ReactでonMouseEnterとは何ですか?

ReactのonMouseEnterは、マウスが特定の要素に乗った瞬間に実行されるマウスイベントハンドラです。ホバー時のエフェクトやインタラクションに使われます。
カテゴリの一覧へ
新着記事
New1
React
Reactコンポーネントの再利用と分割を完全マスター!初心者でもわかるコンポーネント設計
New2
React
ReactでAxiosインターセプターの使い方を完全ガイド!初心者でもわかるリクエストとレスポンスの処理方法
New3
React
JSXの書き方!初心者でもわかるReactタグと属性の基本ルール解説
New4
React
ReactとDockerを使った開発環境構築の基本を徹底解説!初心者でもわかるReactとDockerの連携方法
人気記事
No.1
Java&Spring記事人気No1
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
React
Reactのイベントハンドリングのアンチパターンまとめ!初心者でもわかる注意点
No.3
Java&Spring記事人気No3
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.4
Java&Spring記事人気No4
React
ReactでFetch APIのローディング状態を管理する方法|初心者にもわかる解説
No.5
Java&Spring記事人気No5
React
Reactのカスタムフックの作り方を完全ガイド!再利用可能なロジックを切り出す仕組み
No.6
Java&Spring記事人気No6
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.7
Java&Spring記事人気No7
React
Reactでファイルアップロードを実装する方法を解説!Fetch APIで画像やPDFを送る仕組みを初心者向けに紹介
No.8
Java&Spring記事人気No8
React
Reactのフォーム処理でよくあるエラーと解決法を完全解説!初心者でも安心して学べるReact入門