JavaScript 如何检测触摸屏设备
有时您可能在寻找一些功能以包含到您的Web应用程序中,这些功能只能在具有触摸屏的设备上可用。您可能需要在游戏应用程序或GPS和导航应用程序中为触摸屏用户引入更智能的控件时进行此检测。虽然有许多JavaScript库(如Modernizer、jQuery等)专门设计用于执行此类任务。
需要注意的是,设备支持触摸事件并不意味着它是专用的触摸屏设备。许多高端超极本都支持触摸。因此,为了获得更好的用户体验,您应该在检测触摸屏设备时考虑一些其他属性。
为了执行此检查,针对所有可能的浏览器,我们将使用以下三个属性:
- ontouchstart: 处理触摸DOM元素后触发的事件处理程序。
- maxTouchPoints: Navigator接口的只读属性,返回设备支持的最大同时触摸触摸点数。
- msMaxTouchPoints: 与上面相同,只是在目标浏览器IE 10及以下使用厂商前缀“ms”。
语法:
function is_touch_enabled() {
return ( 'ontouchstart' in window ) ||
( navigator.maxTouchPoints > 0 ) ||
( navigator.msMaxTouchPoints > 0 );
}
示例: 如果检测到触摸屏设备,则显示此示例中的图像,否则将不显示图像。
<!DOCTYPE html>
<html>
<head>
<title>
Detect touch screen device
using JavaScript
</title>
</head>
<body>
<p>
Detect touch screen device
using JavaScript
</p>
<p>
If touch screen detected then display
an image otherwise image will not
display
</p>
<div id="GFG"></div>
<script type="text/javascript">
function is_touch_enabled() {
return ( 'ontouchstart' in window ) ||
( navigator.maxTouchPoints > 0 ) ||
( navigator.msMaxTouchPoints > 0 );
}
var src =
"https://write.geeksforgeeks.org/wp-content/uploads/gfg-39.png";
if( is_touch_enabled() ) {
var img = "<img src=" + src + " height='100'/>";;
}
else {
var img = "";
}
document.getElementById('GFG').innerHTML = img;
</script>
</body>
</html>
输出结果:
- 非触摸屏上的输出结果:
- 触摸屏上的输出:
示例2: 在这个示例中,只有在设备具有触摸功能时,才能拖动一个 <div>
元素。
<!DOCTYPE html>
<html>
<head>
<title>
Detect touch screen device
using JavaScript
</title>
<link href=
"https://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css"
rel="stylesheet">
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js">
</script>
<script src=
"https://cdnjs.cloudflare.com/ajax/libs/jqueryui-touch-punch/0.2.3/
jquery.ui.touch-punch.min.js">
</script>
<style>
#draggable {
width: 150px;
height: 50px;
text-align: center;
}
</style>
<script>
function is_touch_enabled() {
return ( 'ontouchstart' in window ) ||
( navigator.maxTouchPoints > 0 ) ||
( navigator.msMaxTouchPoints > 0 );
}
if( is_touch_enabled() ) {
(function() {
( "#draggable" ).draggable();
});
}
</script>
</head>
<body>
<div id="draggable" class="ui-widget-content">
<p>Draggable Elements!</p>
</div>
</body>
</html>
输出:
- 非触摸屏上的输出:
- 触摸屏上的输出: