过去,检查鼠标是否存在的最佳方法是查找touch event support。但是,桌面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();
});
});
答案 0 :(得分:5)
你可以对detecting keyboard or touch input的解决方案做相反的事情。只需等待实际的触摸事件或鼠标移动事件,并根据该事件做出决定。如果检查是否存在事件处理程序,则浏览器可能会指示它具有该事件,即使它当前没有在支持它的硬件上运行,因此唯一可靠的做法是等待并查看哪些实际事件触发。
答案 1 :(得分:1)
您可能想要考虑使用Modernizr,您可以使用Modernizer.hasEvent()
(docs)方法执行以下操作:
Modernizr.hasEvent("mouseover", document);
答案 2 :(得分: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.htm
获取了isEventSupported
函数
答案 3 :(得分:-1)
如果网站能够像他们一样准确地检测到您正在使用移动浏览器,为什么不能使用相同的技术来推断它们没有鼠标悬停支持?