【发布时间】:2014-10-18 18:05:12
【问题描述】:
我在网上花了很多时间研究检测触摸设备的各种方法,但这个令人惊讶的复杂问题似乎没有明确的答案。基于this article,我决定采用以下方法。
// Run immediately and assign a global variable (touch_enabled) so it is accessible anywhere.
// First try to detect (not entirely reliable)
window.touch_enabled = !!('ontouchstart' in window) || !!('onmsgesturechange' in window);
// Overwrite/set touch enabled to false on mousemove
$(window).on('mousemove', function() { window.touch_enabled = false; });
// Overwrite/set touch enabled to true on touchstart
$(window).on('touchstart', function () { window.touch_enabled = true; });
我想知道是否有人可以指出这种方法的任何问题。我尚未对其进行现场测试,并将立即进行测试,但如果有任何第二意见,我们将不胜感激。
下面是一个快速演示。
window.touch_enabled = !!('ontouchstart' in window) || !!('onmsgesturechange' in window);
$(window).on('mousemove', function() { window.touch_enabled = false; });
$(window).on('touchstart', function () { window.touch_enabled = true; });
setInterval(function() { $('.output').text(window.touch_enabled); }, 200);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
Touch Enabled = <span class="output"></span>
【问题讨论】:
-
顺便说一句,我在演示中使用了一个计时器来测试触摸设备是否切换到输入设备(例如,将鼠标插入 MS Surface 平板电脑)。谁有,请告诉我它是如何工作的!
-
您可以考虑使用 Modernizr 之类的库来帮助您解决此问题。
-
我会读到这个,哭泣,重新考虑你的方法。 github.com/Modernizr/Modernizr/issues/548
-
@Andy - 我试图避免加载整个库来进行简单的触摸检测。另外,Modernizr 似乎也不可靠。
标签: javascript jquery mobile touch detect