8

以前は、マウスの存在を確認する最良の方法は、タッチイベントのサポートを探すことでした。ただし、デスクトップChromeはタッチイベントをサポートするようになったため、このテストは失敗に終わります。

タッチイベントの存在に基づいて推測するのではなく、マウスオーバーイベントのサポートを直接テストする方法はありますか?

解決策: AshleysBrainからの回答に基づいて、機能したコードは次のとおりです。

jQuery(function()
{
    // Has mouse
    jQuery("body").one("mousemove", function(e)
    {
        attachMouseEvents();
    });

    // Has touchscreen
    jQuery("body").one("touchstart", function(e)
    {
        // Unbind the mouse detector, as this will fire on some touch devices. Touchstart should always fire first.
        jQuery("body").unbind("mousemove");

        attachTouchEvents();
    });
});
4

4 に答える 4

5

キーボードまたはタッチ入力を検出するためのソリューションの反対を行うことができます。実際のタッチイベントまたはマウス移動イベントを待って、それに基づいて決定するだけです。イベントハンドラーの存在を確認すると、ブラウザーは、イベントハンドラーをサポートするハードウェアで現在実行されていなくても、イベントがあることを示す場合があるため、信頼できる唯一の方法は、実際に発生するイベントを確認することです。

于 2012-02-28T08:36:44.180 に答える
1

Modernizrの使用を検討することをお勧めします。 Modernizer.hasEvent()docs)メソッドを使用して次のようなことを行うことができます。

Modernizr.hasEvent("mouseover", document);
于 2012-02-24T09:24:54.400 に答える
0

私はこれを試しましたが、うまくいきました。

<html>
<head>
    <script type="text/javascript">
        function isEventSupported(eventName) {
            var el = document.createElement("body"[eventName] || "div");
            var isSupported = "on" + eventName.toLowerCase() in el || top.Event && typeof top.Event == "object" && eventName.toUpperCase() in top.Event;
            el = null;
            return isSupported;
        }
    </script>
</head>

<body onload="alert(isEventSupported('mouseover'));">TEST mouseover event</body>
</html>

http://www.strictly-software.com/eventsupport.htmisEventSupportedから関数を取得しました

于 2012-02-28T09:41:54.847 に答える
-1

Webサイトが、モバイルブラウザーを使用していることを正確に検出できる場合、同じ手法を使用して、マウスオーバーがサポートされていないことを推測できないのはなぜですか。

于 2012-02-24T09:11:44.207 に答える