12

私はこの小さな問題を抱えており、あなたの助けを求めています。次のようなdiv要素があり、その中にimg要素があります。

<div id="parent" onmouseover="MyFuncHover()" onmouseout="MyFuncOut()">
    <img id="child" src="button.png" style="visibility: hidden" />
</div>

<script type="text/javascript">
    function MyFuncHover() {
        // Here I have some code that makes the "child" visible
    }

    function MyFuncOut() {
        // Here I have some code that makes the "child" invisible again
    }
</script>

ご覧のとおり、画像はdivの子です。divを離れるときにのみ、子が消えるようにしたいのです。それでも、マウスを画像の上に移動すると、MyFuncOut()関数が呼び出されるように見えます (画像にカーソルを合わせて div を離れるからだと思います)。そうなってほしくない。MyFuncOut ()関数は、 div領域を離れるときにのみ呼び出されるようにします。

マウスを子コントロールの上に移動すると、親が mouseout イベントを呼び出すことを知りませんでした (子の上にいても、親の上にもいます)。私はこれに閉じ込められており、あなたの良いアドバイスが少し必要です. ありがとう!

変更点

OK イベントバブリングは、子を「マウスアウト」したときに「マウスアウト」イベントを親に送信しません。また、子を「マウスオーバー」したときに「マウスオーバー」イベントを親に送信しません。それは私が必要とするものではありません。子を「マウスオーバー」したときに、親の「マウスアウト」イベントが送信されないようにする必要があります。それを得る?イベント バブリングは、たとえば、子のクリック イベントを親に伝播させたくない場合に便利ですが、私の場合はそうではありません。奇妙なのは、同じ親内に他の要素があり、それらを「マウスオーバー」したときに親の「マウスアウト」イベントを発生させないことです。

4

5 に答える 5

24

jqueryで利用可能な「mouseenter」および「mouseleave」イベントを使用できます。以下のコードは次のとおりです。

$(document).ready(function () {
        $("#parent").mouseenter(function () {
            $("#child").show();
        });
        $("#parent").mouseleave(function () {
            $("#child").hide();
        });
    });

上記はイベントを添付することです。

<div id="parent">
    <img id="child" src="button.png" style="display:none;" />
</div>
于 2012-05-17T05:16:06.780 に答える
7

以下のソリューションを使用できます。これは純粋な JavaScript であり、私は成功しました。

var container = document.getElementById("container");
var mouse = {x: 0, y: 0};

function mouseTracking(e) {
    mouse.x = e.clientX || e.pageX;
    mouse.y = e.clientY || e.pageY;
    var containerRectangle = container.getBoundingClientRect();

    if (mouse.x > containerRectangle.left && mouse.x < containerRectangle.right &&
            mouse.y > containerRectangle.top && mouse.y < containerRectangle.bottom) {
        // Mouse is inside container.
    } else {
        // Mouse is outside container.
    }
}
document.onmousemove = function () {
    if (document.addEventListener) {
        document.addEventListener('mousemove', function (e) {
            mouseTracking(e);
        }, false);
    } else if (document.attachEvent) {
        // For IE8 and earlier versions.
        mouseTracking(window.event);
    }
}

お役に立てば幸いです。

于 2014-08-21T13:46:34.193 に答える
4

ターゲットが画像ではないことを確認する if ステートメントを MyFuncOut 関数に追加するだけです

if (event.target !== imageNode) {
     imageNode.style.display = 'none'
}
于 2012-05-16T12:17:29.520 に答える
1

私もこれに問題があり、それを機能させることができませんでした。これは私が代わりにしたことです。はるかに簡単で、JavaScript ではないため、高速でオフにすることはできません。

div.container {
    opacity:0.0;
    filter:alpha(opacity="00");
}

div.container:hover {
    opacity:1.0;
    filter:alpha(opacity="100");
}

不透明度に CSS3 トランジションを追加して、より滑らかな感じにすることもできます。

于 2012-05-16T12:02:27.380 に答える
1

子要素 pointer-event:none; の css を設定するだけです。例を参照してください:

#parent {
  width: 500px;
  height: 500px;
  border: 1px solid black;
}

#child {
  width: 200px;
  pointer-events: none; # this does the trick
}
<div id="parent" onmouseover="MyFuncHover()" onmouseout="MyFuncOut()">
    <img id="child" src="https://i2.wp.com/beebom.com/wp-content/uploads/2016/01/Reverse-Image-Search-Engines-Apps-And-Its-Uses-2016.jpg?w=640&ssl=1" />
</div>

<script type="text/javascript">
    function MyFuncHover() {
      console.log("mouse over")
    }

    function MyFuncOut() {
      console.log("mouse out")
    }
</script>

于 2018-10-12T20:32:03.820 に答える