2

mouseenterマウスに触れていないときにイベントがトリガーされることに気付きましたが、カーソルの下のページがスクロールされます。

このフィドルをチェックしてください: http://jsfiddle.net/F3EwW/

再現する手順:

  1. をクリックします。li
  2. 上下の矢印キーを使用して項目をスクロールします
  3. 以下がビューにスクロールされると、mouseenterイベントがトリガーされることに気付くでしょう。li

注:この動作に気付くには、マウス カーソルが上にあることを確認し、そのliままにしておきます。

当初、私はこれをデフォルトの動作として受け入れ、コードでこれを処理するための回避策を講じました..しかし、興味を持って、どこにも見つからなかったドキュメントでこの動作を確認したいと思いました.

この動作が仕様または本物の Web ページのどこかに文書化されているかどうかは誰にもわかりませんか?

w3spec event scrollmouse event orderを調べましたが、これについては何も見つかりませんでした。

また、mouseenterの仕様説明は次のとおりです。

ユーザー エージェントは、ポインティング デバイスが要素またはその子孫要素の 1 つの境界上に移動したときに、このイベントを送出する必要があります。このイベント タイプは mouseover に似ていますが、バブルしないという点で異なり、ポインター デバイスが要素からその子孫要素の 1 つの境界に移動したときにディスパッチしてはなりません。

mouseoverChrome では、同様にトリガーされることに気付くでしょう。これについては、すでに質問バグレポートを投稿しています。

4

1 に答える 1

0

あなたが持っていることに気づきます $('li').mouseenter(function () {か?これにより、mouseenter イベントがこの li 要素のすべてにバインドされるため、上下のキーを使用してスクロールし、マウスがまだ ul 内にある場合、新しい li を入力し続けます。これは、マウスが新しい要素に入るときの意図しない機能ではありませんでした

あなたが探している動作は、次のようなものです。

$("element").bind("mousemove mouseenter", function(event) {
    //...
});

また、DOM は、OS のようにマウスが画面上のどこにあるかではなく、ドキュメントに対するマウスの動きを認識する必要があります。

于 2013-05-29T08:13:52.550 に答える