在JavaScript/jQuery中,如何检测客户端设备是否有鼠标?
我有一个网站,在用户将鼠标悬停在某个项目上时会弹出一些信息面板。我正在使用jQuery.hoverIntent来检测悬停事件,但是这显然不适用于像iPhone/iPad/Android这样的触摸屏设备。因此,在这些设备上,我想改为使用轻触来显示信息面板。
在JavaScript/jQuery中,如何检测客户端设备是否有鼠标?
我有一个网站,在用户将鼠标悬停在某个项目上时会弹出一些信息面板。我正在使用jQuery.hoverIntent来检测悬停事件,但是这显然不适用于像iPhone/iPad/Android这样的触摸屏设备。因此,在这些设备上,我想改为使用轻触来显示信息面板。
这篇有用的博客文章是从Modernizr检测触摸事件的源代码中链接过来的。结论是:不可能通过Javascript可靠地检测到触摸屏设备。
function isTouchDevice(){
return true == ("ontouchstart" in window || window.DocumentTouch && document instanceof DocumentTouch);
}
true
进行比较?õ.O 只需返回布尔值或 !!bool
以确保它返回布尔值。 - jpenna$.support.touch
不知道为什么这个东西文档那么少,但是它在跨浏览器方面是安全的(支持当前浏览器的最新2个版本)。
Modernizr.touch
非常容易。Modernizr.touch
和用户代理测试。var deviceAgent = navigator.userAgent.toLowerCase();
var isTouchDevice = Modernizr.touch ||
(deviceAgent.match(/(iphone|ipod|ipad)/) ||
deviceAgent.match(/(android)/) ||
deviceAgent.match(/(iemobile)/) ||
deviceAgent.match(/iphone/i) ||
deviceAgent.match(/ipad/i) ||
deviceAgent.match(/ipod/i) ||
deviceAgent.match(/blackberry/i) ||
deviceAgent.match(/bada/i));
if (isTouchDevice) {
//Do something touchy
} else {
//Can't touch this
}
Modernizr.touch
函数替换为('ontouchstart' in document.documentElement)
此外,请注意,测试用户代理 iemobile
将为您提供比 Windows Phone
更广泛的检测到的Microsoft移动设备范围。
此外还可以参考这个SO问题
element.addEventListener('touchstart',onTouchStartCallback,false);
element.addEventListener('onmousedown',onMouseDownCallback,false);
...
JavaScript 应该根据用户输入自动调用正确的监听器。因此,在触摸事件的情况下,将触发 onTouchStartCallback
,模拟您的悬停代码。
请注意,触摸可能会触发两种类型的监听器,即触摸和鼠标。但是,触摸监听器首先执行,并且可以通过调用 event.preventDefault()
防止后续的鼠标监听器触发。
function onTouchStartCallback(ev) {
// Call preventDefault() to prevent any further handling
ev.preventDefault();
your code...
}
更多阅读请点击这里。
我在iPad开发中使用:
if (window.Touch)
{
alert("touchy touchy");
}
else
{
alert("no touchy touchy");
}
我可以有选择地绑定触摸事件(例如ontouchstart)或鼠标事件(例如onmousedown)。我还没有在Android上进行测试。
:hover
,因此在为多个设备编写一个样式表时,最好仅将:hover
用于纯粹的美观目的。 - drudge