1

最近、私のウェブサイトが Chrome で非常に奇妙に動作するようになりました。Chrome でタッチパッドをタップすると (最近の更新から?) 2 つのイベントが発生することがわかりました -clickmouseleave.

<div id="tap">HOVER, TAP or CLICK</div>
<script>
tap.addEventListener("mouseleave",function(){alert("mouseleave");});
tap.addEventListener("click",function(){alert("click");});
</script>

JSFiddleは次のとおりです。

これまでのところ、この問題は Google Chrome にのみ適用されるようです。Firefox と Yandex (Chromium ベース) では、fakeは起動mouseleaveしません。ボタン (マウスまたはタッチパッド ボタン) によるクリックも正常に動作します - いいえmouseleave

タップ時にこのマウスリーブを防ぐにはどうすればよいですか? または、多分、タップマウスリーブと実際のマウスリーブを区別する方法はありますか?

4

1 に答える 1

5

mouseleaveChrome で不正なタップ動作が発生した場合、イベント オブジェクトを調べて、バグのある動作かどうかを判断できることに気付きました。

mouseleave = function (e) {
  if (e.screenX === 0 && e.screenY === 0) {
    // BUG in Chrome
    return;
  }
  // Correct behavior...
}

または、バグのある動作が発生したときにこれらが発生することに気付いたので、e.toElementおよび/またはを確認できます。e.relatedTargetnull

mouseleave = function (e) {
  if (!e.relatedTarget || !e.toElement) {
    // BUG in Chrome
    return;
  }
  // Correct behavior...
}
于 2018-03-05T16:27:26.480 に答える