我已经编写了一个代码,以基于触摸和非触摸来获取事件。它适用于所有其他浏览器和设备,但Firefox。默认FF返回true
。
var thumbsEvent, isTouch = Modernizr.touch; // detect the touch
if(isTouch){
thumbsEvent = 'click';//on touch surface, click
}
else {
thumbsEvent = 'mouseover';//on non touch surface, mouseover
}
有没有办法解决这个问题。
答案 0 :(得分:15)
代表Modernizr - 我们真的很抱歉。
Modernizr.touch
已在尚未发布的版本3.0中重命名为Modernizr.touchevents
,因为它更准确地描述了检测。基本上,所有这些检测都在检查是否存在触摸事件,如果找到它们则返回true。如果启用开发人员工具,桌面chrome会执行相同的操作。这只是意味着您的笔记本电脑上的firefox版本报告了对触摸事件的支持,原因可能有多种。
答案 1 :(得分:4)
我有同样的问题,这为我解决了这个问题:在firefox中转到" about:config",然后搜索设置" dom.w3c_touch_events.enabled"并重置那个。然后我不得不重新启动firefox,之后" Modernizr.touch"正确返回" false"对我来说。
答案 2 :(得分:2)
有同样的问题:Modernizr.touch在台式机FireFox 33.1,Mac OS上返回true。
我的解决方案:使用移动优先方法,默认情况下应用所有与触摸相关的铃声和口哨声。如果Modernizr检测到.no-touch,则为桌面用户应用(或禁用)某些网站功能。
答案 3 :(得分:1)
我前段时间遇到过同样的问题。
问题是有些笔记本电脑型号带有触摸屏版本。我们发现,如果使用这样的模型,Modernizr.touch
即使此人使用非触控笔记本电脑型号也会返回true。
现在,点击事件可以在触摸设备上运行,但不是相反。因此,我们通过添加额外的检查来解决此限制:
var thumbsEvent, isTouch = Modernizr.touch;
var isAndroid = ...; // Android detection code
var isIOs = ...; // iOS detection code
// touch is only supported on iOS and Android
// devices, which have for sure a touch interface
if(isTouch && (isAndroid || isIOs) ){
thumbsEvent = 'click';
}
else {
thumbsEvent = 'mouseover';
}
这可能不是最佳解决方案,因为您需要使用用户代理嗅探而不是功能检测来进行设备检测,这可能就是您首先使用Modernizr的原因。
此外,支持触摸但既不是iOS也不是Android的设备将被排除在触摸事件之外。
答案 4 :(得分:1)
暂时解决这个问题。我遇到了同样的问题所以我做的是我做了一点挖掘找到一个html5属性,它被FF检测到但不是在移动设备上,我发现flexbox是其中之一。 (阅读:http://html5please.com/#flexbox)。 以下是可用于修复问题的代码:
var isTouch = Modernizr.touch, // detect the touch
isFlex = Modernizr.flexbox; // detect flexbox
if (isTouch) {
// Detect if FF
if (isFlex) ) {
thumbsEvent = 'mouseover'; //on FF, mouseover
} else {
thumbsEvent = 'click';//on non-FF touch surface, click
}
} else {
thumbsEvent = 'mouseover';//on non touch surface, mouseover
}
请注意这是暂时的,如果移动设备开始支持flexbox,它将无法正常工作。
答案 5 :(得分:1)
至少从FF27开始就知道Firefox Bug:https://bugzilla.mozilla.org/show_bug.cgi?id=970346