マウスやポインターを持たないため、画面上の要素をホバリングするという概念は、タッチデバイスには実際には適用できません。 JavaScriptホバーイベントのナビゲーションやその他の目的に頼っている多くのWebサイトでは、一部のタッチデバイスは、1回のタップでmouseenter
を発生させるように実装しています。イベントハンドラもclick
にバインドされている場合、これは要素の2回目のタップでのみ発生します。タッチデバイス上でjQueryのホバー(mouseenter、mouseleave)を無視する
jQueryのhover()
機能が内部mouseenter
とmouseleave
を使用するので、両方hover()
とclick()
登録持つ要素は後者をトリガするために2つのタップを必要とします。多くのユースケースでは、これはまさにあなたが起こりたいものです。しかし、hover()
の処理では、ホバリングされた要素に強調(ツールチップ、グローなど)が追加されるアプリケーションでは、onclick
ハンドラに負担がかかり、すべてのタッチデバイスをスキップする方が意味があります。
私は具体的にtouchstart
とtouchend
のイベントを聞く方法を知っており、タッチのユーザーエクスペリエンスを調整することができます。これは私の問題に対する有効な解決策ですが、私はこの問題を回避するための "簡単な"方法があると考えています。私は、その署名にhover()
と似たメソッドを想像していますが、提供されているイベントハンドラを非タッチデバイスにのみ接続する方法で実装されています。
jQueryにはこのようなメソッドがありますか?どんなプラグインですか?それとも私はここで何か見落としていますか?
挙動のiPad、iPhone、およびいくつかのAndroidの携帯電話に確認しました。
デスクトップとタッチデバイスでJsFiddle demoを実行すると、私の話を見ることができます。
これがなぜ投票されたのか分かりませんが、両方のオプションのデバイスでホバーイベントが緩んでいませんか? – Aaron