如何检测设备是否支持鼠标?

2024-02-11

我目前使用以下测试(取自 Modernizr)来检测触摸支持:

function is_touch_device() {
    var bool;
    if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
        bool = true;
    } else {
        injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function(node) {
            bool = node.offsetTop === 9;
        });
    }
    return bool;
}

但有些设备同时由触摸和鼠标驱动,因此我想要一个单独的函数来检测设备是否支持鼠标。进行这项检查的好方法是什么?

最终我的目的是能够做到这些:

if(is_touch_device())

if(has_mouse_support())

if(is_touch_device() && has_mouse_support())

There's CSS 媒体 https://developer.mozilla.org/docs/Web/CSS/@media/pointer就是为了这个!

您可以通过获取该值来检查某个设备是否有鼠标pointerCSS媒体特性:

if (matchMedia('(pointer:fine)').matches) {
  // Device has a mouse
}

因为它是 CSS,所以你甚至不需要使用 JavaScript:

@media (pointer: fine) {
  /* Rules for devices with mouse here */
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测设备是否支持鼠标? 的相关文章

随机推荐

  • 摄像头下方有一个黑色的底部空间

    我正在介绍一个UIImagePickerController from a UITabBarController let imagePicker UIImagePickerController imagePicker delegate se
  • 预下载所有依赖项

    我需要将 Maven 构建 Java 项目发布给远程 QA 团队 为此 我想下载所有依赖项 然后发送它们 这样他们就不需要下载它们 目前所有依赖项都定义在pom xml文件 我们使用mvn install or mvn package构建项
  • 如何删除Selectbox/Checkbox的默认状态?

    我想知道如何删除选择框的默认箭头和复选框中的渐变 并且我想在其上使用自定义图像 例如 这是一些代码
  • 尝试解析 LocalDateTime 时出现异常

    我正在使用以下时间戳格式 yyyyMMddHHmmssSSS 以下方法效果很好 public static String formatTimestamp final Timestamp timestamp final String form
  • 如何查看 select2 实例的设置选项?

    我想要将选项设置为 select2 实例 特别是如果allowClear 选项设置为 true 或 false 浏览对象我发现了allowClear选项 jQuery gt select2 gt 选项 gt 选项 but I don t k
  • 为什么我无法为对话框视图中的按钮设置 onClickListener?

    我有一个自定义对话框 如下所述 我的自定义对话框布局 my dialog xml 其中只包含一个 关闭 按钮
  • CSS动画闪烁,尝试了我能找到的所有技巧

    我正在 Codepen 中制作一个简单的动画 诗淡入 然后单词 也是按钮 淡入 用户单击单词 它会更改为诗的下一部分 我的问题是 在淡出开始之前 诗歌和单个单词会闪烁 我已经尝试了所有我能找到的技巧 并添加 webkit backface
  • Heroku pg:psql 停止运行

    当我跑步时heroku pg psql i get gt Connecting to postgresql cylindrical 38664 并熄火 一切看起来都很顺利 但它只是卡住了 什么也没做 我似乎在 gitbash 中遇到了同样的
  • 在 perl 中读取和写入文件

    this is just an example 假设上面是out txt 我想读书out txt并写入同一个文件
  • 在 Android 中从纬度/经度获取企业名称或地标

    好吧 我已经为此搜索了相当长的时间 我有一个距我新发现的位置的纬度 经度 geocoder 的 getFromLocation 从纬度 经度返回一定数量的地址 这一切都很好 然后我将它放入一个适配器中 该适配器填充了一个旋转器 也运行得很好
  • UIButton 在单元格被触摸时也会突出显示

    I ve a UIButton在我弹出的表格单元格上 touchUpInside a UIAlertView并询问用户是否要删除与该单元格关联的文件 否则 触摸单元格本身会突出显示该单元格 然后移动到下一个级别以显示内容 问题是当细胞sel
  • 如何在一定时间后重试功能请求

    如果用户数据为空 如何让它重试发送尝试 最多重试 2 次 10 秒后重试 1 次 public class UserHandler private List users new ArrayList public void addUser u
  • 绕过 requiredfieldvalidator

    我有一个网络表单 上面有验证器 当用户按下提交按钮时 验证器可以很好地工作 但是 当用户按下注销按钮时 验证器会停止该按钮的工作 关于如何解决这个问题有什么建议吗 您需要使用CausesValidation按钮上的属性
  • nf_conntrack_helper注册未注册端口返回错误

    我有以下代码从内核 3 18 取消注册和注册 sip conntrack static void nf conntrack sip fini void int i j for i 0 i lt ports c i for j 0 j lt
  • 在没有 gitosis/gitolite 的情况下通过 SSH 运行“安全”git 服务器?

    是否可以通过 ssh 运行 git 服务器 使用authorized keys and command 限制仅访问 git 存储库 而不使用 gitosis gitolite 是的 分配git shell http www kernel o
  • 获取 Youtube 数据 API 的 403 禁止错误

    我在对 YouTube 数据 API 进行 API 调用时收到 403 禁止错误 我尝试生成不同类型的密钥 Web 浏览器 服务器等 钥匙不受限制 我尝试从服务器和 Chrome 的邮递员拨打电话 请求 URL 和响应如下 https ww
  • 访问 AVRO GenericRecord (Java/Scala) 中的嵌套字段

    我有一个带有嵌套字段的 GenericRecord 当我使用genericRecord get 1 它返回一个包含嵌套 AVRO 数据的对象 我希望能够像这样访问该对象genericRecord get 1 get 0 但我不能 因为 AV
  • 在 woocommerce 中隐藏折扣信息而不取消优惠券

    我在 Woocommerce 购物车中使用优惠券进行计算 它会自动为总额添加折扣 以便可以将正确的金额发送到支付网关 我想向访客隐藏有关此优惠券 折扣的所有信息 Problem 我发现的唯一方法 见下文 隐藏优惠券字段 行 总计 和消息 但
  • COBOL:GDG 文件描述符 (FD) 可以引用多代吗?

    我有一个程序可以读取 GDG 文件并将数据移动到工作存储 我很想知道是否可以使用对文件定义的引用对多代 GDG 重复此过程 也许有一种方法可以在文件定义上使用下标 我的想法是必须有一种方法将不同的文件定义移动到引用变量中以访问文件 基于建议
  • 如何检测设备是否支持鼠标?

    我目前使用以下测试 取自 Modernizr 来检测触摸支持 function is touch device var bool if ontouchstart in window window DocumentTouch document