Ben*_*enM 13 javascript google-chrome javascript-events
过去,当检测设备是否支持JavaScript中的触摸事件时,我们可以执行以下操作:
var touch_capable = ('ontouchstart' in document.documentElement);
Run Code Online (Sandbox Code Playgroud)
但是,true
即使底层设备不支持触摸事件,Google Chrome(17.x.x +)也会返回上述检查.例如,在Windows 7上运行上面的代码返回true,因此如果我们将它与以下内容结合起来:
var start_evt = (touch_capable) ? 'ontouchstart' : 'onmousedown';
Run Code Online (Sandbox Code Playgroud)
在Google Chrome上,由于我们绑定了该事件,因此该事件永远不会被触发ontouchstart
.简而言之,有没有人知道绕过这个的可靠方法?我目前正在运行以下检查:
var touch_capable = ('ontouchstart' in document.documentElement && navigator.userAgent.toLowerCase().indexOf('chrome') == -1)
Run Code Online (Sandbox Code Playgroud)
这远非理想......
这是对Modernizr如何执行触摸检测的修改,增加了对IE10 +触摸设备的支持.
var isTouchCapable = 'ontouchstart' in window ||
window.DocumentTouch && document instanceof window.DocumentTouch ||
navigator.maxTouchPoints > 0 ||
window.navigator.msMaxTouchPoints > 0;
Run Code Online (Sandbox Code Playgroud)
这并非万无一失,因为检测触摸设备显然是不可能的.
你的旅费可能会改变:
更新: 提示:不要使用触摸功能检测来控制和指定UI行为,而是使用事件侦听器.点击/触摸/键盘事件的设计,而不是设备,触摸功能检测通常用于节省添加事件监听器的CPU /内存费用.触摸检测可能有用且适当的一个示例:
if (isTouchCapable) {
document.addEventListener('touchstart', myTouchFunction, false);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18544 次 |
最近记录: |