【发布时间】:2011-12-11 22:14:36
【问题描述】:
我正在开发一个 web 应用程序(不是一个包含有趣文本页面的网站),它具有非常不同的触摸界面(单击时手指会隐藏屏幕)和鼠标(严重依赖悬停预览)。 我怎样才能检测到我的用户没有鼠标来向他展示正确的界面?我打算为同时使用鼠标和触摸的人(如某些笔记本)留下一个开关。
浏览器中的触摸事件功能实际上并不意味着用户正在使用触摸设备(例如,Modernizr 并没有削减它)。如果设备有鼠标,则正确回答问题的代码应返回 false,否则返回 true。对于有鼠标和触摸的设备,它应该返回 false(不只是触摸)
顺便说一句,我的触摸界面可能也适用于只有键盘的设备,所以我更希望检测到缺少鼠标。
为了更清楚地说明需求,这是我希望实现的 API:
// Level 1
// The current answers provide a way to do that.
hasTouch();
// Returns true if a mouse is expected.
// Note: as explained by the OP, this is not !hasTouch()
// I don't think we have this in the answers already, that why I offer a bounty
hasMouse();
// Level 2 (I don't think it's possible, but maybe I'm wrong, so why not asking)
// callback is called when the result of "hasTouch()" changes.
listenHasTouchChanges(callback);
// callback is called when the result of "hasMouse()" changes.
listenHasMouseChanges(callback);
【问题讨论】:
-
我认为,如果您希望一个应用程序同时适用于桌面和移动/触控,但每个应用程序具有不同的行为,您需要重新考虑您的设计。我认为此时您实际上不可能实现,因为在 Google 上快速搜索“javascript 检测鼠标”会显示 quirksmode.org 上的一篇相当有用的帖子,用于检测鼠标的各种状态(点击、位置、等),但鼠标是否实际存在的结果为零。
-
也许是因为谷歌没有帮助我才在这里问的。
-
你试过从 jquery 中输入鼠标输入吗? $(document).mouseenter(function(e) { alert("mouse"); });
-
在考虑了近十种有希望的途径后,在几分钟内拒绝了每一种途径,这个问题让我非常疯狂。
标签: javascript html css touch mouse