2012-01-20 87 views
10

这与在浏览器中检测触摸支持相反。如何检测浏览器是否支持鼠标? Chrome桌面应该返回true,Safari for iPad应该返回false。检测鼠标支持

我在想移动浏览器会针对通常的检测技巧返回误报。

回答

0

理论上,您应该能够测试它是否具有触摸支持,然后反过来。我可能是错的,但据我所知,不支持触摸事件的浏览器将支持鼠标事件,反之亦然,因为这两者之间的区别通常是移动浏览器与普通浏览器。

编辑:另一种可能性是使用onmousemove,就像使用ontouchmove检测触摸功能一样。不过,我不确定移动浏览器是否会在移动设备上注册。

+1

那些使用触摸屏和鼠标的多功能一体机的人呢? – qwertymk

+0

我想你的网站不会像你真正想要的那样工作,但它是否需要修复取决于这些浏览器的普遍程度,他在做什么,以及这些设备上的人是否想要使用他现场。这是一种可能的解决方法。 – CSturgess

+1

这不起作用。桌面Firefox返回true以进行触摸检测。他们在桌面和移动设备上使用相同的代码库。 – Matthew

0

该方法检查Touch对象是否存在而不使用事件。如果没有,你有一个鼠标。我认为这是最简单的方法。它将在具有触摸功能和鼠标的罕见设备上返回false,因此您必须决定是否影响您的设计。

function hasTouch() { 
    return (typeof Touch == 'object'); 
}; 

演示:http://jsfiddle.net/ThinkingStiff/ux89v/

脚本:

function hasTouch() { 
    return (typeof Touch == 'object'); 
}; 

document.getElementById('touch').textContent = 'Mouse: ' + !hasTouch(); 

HTML:

<div id="touch"></div> 
+1

随着触摸屏开始出现在笔记本电脑和台式机上,使用鼠标和触控的设备将在未来几个月/几年内变得越来越少。我不明白为什么触摸不一定会成为这些设备上的一个对象? –

+0

@Jonhoo是的。我只是在我的爱好项目web应用程序中调试奇怪的行为,并注意到我的Javascript代码认为我的17英寸触摸屏笔记本电脑是......手机或类似的东西。由于它有一个触摸屏。 – KajMagnus

1

在浏览器中使用触摸事件:

var clickEvent = ('ontouchstart' in window ? 'touchend' : 'click'); 基本上是说“如果设备支持触摸,只听信息而不是点击” - 在多输入设备上,该设备立即通过鼠标,触控板或键盘关闭任何交互。

本文讨论细节here

另一个见地的文章here

你的问题但是,这一切都取决于你想要达到的目标。