Как я могу надежно определить, поддерживает ли браузер события наведения мыши? - PullRequest
8 голосов
/ 24 февраля 2012

Раньше лучшим способом проверки наличия мыши был поиск поддержки событий касания . Однако настольный компьютер 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 ]

5 голосов
/ 28 февраля 2012

Вы можете сделать обратное решение для обнаружения клавиатуры или сенсорного ввода .Просто дождитесь фактического события касания или движения мыши и решите, основываясь на этом.Если вы проверите наличие обработчика событий, браузер может указать, что у него есть событие, даже если он в данный момент не работает на оборудовании, которое его поддерживает, поэтому единственная надежная вещь, которую нужно сделать, это подождать и посмотреть, какие фактические события запускаются.

1 голос
/ 24 февраля 2012

Возможно, вы захотите подумать об использовании Modernizr , вы можете сделать что-то вроде следующего, используя метод Modernizer.hasEvent() ( docs ):

Modernizr.hasEvent("mouseover", document);
0 голосов
/ 28 февраля 2012

Я попробовал это, и это работает.

<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>

Я взял функцию isEventSupported из http://www.strictly -software.com / eventsupport.htm

0 голосов
/ 24 февраля 2012

Если веб-сайты могут обнаружить, что вы используете мобильный браузер так же точно, как и они, почему вы не можете использовать ту же технику, чтобы сделать вывод, что у них нет поддержки при наведении курсора?

...