检测鼠标支持

10

这是检测浏览器是否支持鼠标的相反操作。我该如何检测浏览器是否支持鼠标?桌面版Chrome应该返回true,iPad上的Safari应该返回false。

我想移动浏览器对于通常的检测技巧会返回错误结果。

3个回答

1
在使用触摸事件的浏览器中: var clickEvent = ('ontouchstart' in window ? 'touchend' : 'click'); 基本上是在说“如果设备支持触摸,则只侦听touchend而不是click”-这在多输入设备上立即排除了通过鼠标、触控板或键盘进行任何交互的可能性。
本文详细讨论了您的问题here 另一篇有深度的文章here 但是,所有这些都取决于您想要实现什么。

0

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

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


1
有人使用带触摸屏和鼠标的一体机怎么样? - qwertymk
我猜你的网站在这种情况下可能无法按照你真正想要的方式工作,但是是否值得修复取决于这些浏览器有多常见,他在使用它做什么以及那些设备的用户是否想使用他的网站。这是一种可能的解决方法。 - CSturgess
1
这样行不通。桌面版Firefox会返回触摸检测的真值。他们在桌面和移动端使用相同的代码库。 - 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
带有鼠标和触摸功能的设备在未来几个月/年将越来越普遍,因为触摸屏开始出现在笔记本电脑和台式机上。我不明白为什么这些设备上不能使用触摸功能? - Jon Gjengset
@Jonhoo 是的,完全正确。我只是在调试我的业余项目Web应用程序中的奇怪行为,并注意到我的Javascript代码认为我的带有触摸屏幕的17英寸笔记本电脑是...一部手机或类似的设备。因为它有一个触摸屏幕。 - KajMagnus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接