首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chrome移动模拟模式中错误的(maxTouchPoints)和(文档中的‘ontouchstart’)

Chrome移动模拟模式中错误的(maxTouchPoints)和(文档中的‘ontouchstart’)
EN

Stack Overflow用户
提问于 2019-04-24 23:10:27
回答 2查看 870关注 0票数 2

我使用如下的触摸屏设备检测:

代码语言:javascript
复制
if (window.navigator.maxTouchPoints || 'ontouchstart' in document)  
    // handle as mobile device
else
    // handle as desktop

当我在Chrome移动仿真中更改屏幕时,maxTouchPoints'ontouchstart' in document的结果都是不可预测的。

对于同一个仿真屏幕,它可以返回等于0或1的maxTouchPoints,以及等于truefalse'ontouchstart' in document

所以,我真的不能在这张支票上。

你能推荐一个解决这个问题的方法吗?

EN

回答 2

Stack Overflow用户

发布于 2021-06-10 01:38:23

我创建了以下函数来检查触摸点是否被实际启用(例如,使用设备/仿真器上的“启用触摸点按钮”):

代码语言:javascript
复制
function isTouchEventsEnabled() {
    // Bug in FireFox+Windows 10, navigator.maxTouchPoints is incorrect when script is running inside frame.
    // TBD: report to bugzilla.
    const navigator = (window.top || window).navigator;
    const maxTouchPoints = Number.isFinite(navigator.maxTouchPoints) ? navigator.maxTouchPoints : navigator.msMaxTouchPoints;
    if (Number.isFinite(maxTouchPoints)) {
        // Windows 10 system reports that it supports touch, even though it acutally doesn't (ignore msMaxTouchPoints === 256).
        return maxTouchPoints > 0 && maxTouchPoints !== 256;
    }
    return 'ontouchstart' in window;
}
票数 3
EN

Stack Overflow用户

发布于 2019-07-15 14:30:27

这个怎么样?

代码语言:javascript
复制
function isTouchscreen() {
  return ("ontouchstart" in window) || (navigator.maxTouchPoints > 0) ? true : false;
}

if (isTouchscreen()) {
  console.log('IS touchscreen');}
else {
  console.log('IS NOT touchscreen');
}

参考:https://developer.mozilla.org/en-US/docs/Web/API/Navigator/maxTouchPoints

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55833326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档