惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
Kaspersky official blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
B
Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
Netflix TechBlog - Medium
腾讯CDC
IT之家
IT之家
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
罗磊的独立博客
P
Privacy International News Feed
D
DataBreaches.Net
T
Threatpost
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
博客园 - 三生石上(FineUI控件)
S
Securelist
P
Palo Alto Networks Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Spread Privacy
Spread Privacy
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Secure Thoughts
Security Archives - TechRepublic
Security Archives - TechRepublic
L
LangChain Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
The Last Watchdog
The Last Watchdog
T
Tor Project blog
V
Vulnerabilities – Threatpost
T
Threat Research - Cisco Blogs
H
Heimdal Security Blog
Hugging Face - Blog
Hugging Face - Blog
Hacker News: Ask HN
Hacker News: Ask HN
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
S
SegmentFault 最新的问题
Know Your Adversary
Know Your Adversary
博客园_首页
N
News and Events Feed by Topic
G
GRAHAM CLULEY
L
LINUX DO - 热门话题
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Help Net Security
Help Net Security
Simon Willison's Weblog
Simon Willison's Weblog
H
Hacker News: Front Page
大猫的无限游戏
大猫的无限游戏
AWS News Blog
AWS News Blog
The Cloudflare Blog
AI
AI

博客园 - 华安

Unity 相机:正交 (Orthographic) vs 透视 (Perspective) - 华安 unity中的button中的onclick控制面板中四个参数的意思分别是什么 - 华安 微信小程序开发中触发 onshow的几种特殊情况 SQL Server备份心得 MYSQL 备份数据库 微信与支付支付功能开发 微信小程序中页面配置下拉刷新 unity中 相机没有视锥效果线框了,如何打开 JSONPath表达式 C# 中的操作JSON类 JObject cookie中的 HttpOnly 、Secure、SameSite 解释 Spring-boot 中基于 IP 的限流和自动封禁 Filter 登录 用 HMAC-SHA256 实现 TwoFA(二重验证)的坑 利用Spring Boot的 filter 结合ConcurrentHashMap 实现“同一IP每分钟最多允许300个404请求,超出后禁用30分钟访问” pixi-filters中的BackdropBlurFilter使用注意事项 PixiJS中的 SplitBitmapText.chars中的每个 BitmapText的x值分析 legend隐藏不想显示的图例 spring-boot HttpServletResponse response.sendRedirect是会跳转到 http而不是https springboot获取post请求参数 JavaScript获取鼠标点一个元素,获取鼠标点击的元素内的位置 spring-boot中配置Mongodbd的问题小结 Rest Template中添加 PATCH请求。 CSS实现修改CheckBox样式 SpringBoot+Thyemleaf报错:Error resolving template Template might not exist or might not be accessible div display flex 如何出现横向滚动条
Javascript如何判断是触摸屏还是PC端
华安 · 2025-12-04 · via 博客园 - 华安

在Web开发中,判断设备是触摸屏还是PC端(鼠标操作)通常涉及到检测用户输入的类型。JavaScript提供了几种方式来实现这一功能,以下是一些常见的方法:

1. 使用 'ontouchstart' 属性

'ontouchstart' 是一个只在触摸屏设备上存在的属性。你可以通过检查这个属性是否存在来判断设备是否为触摸屏。

if ('ontouchstart' in window) {
    console.log('触摸屏设备');
} else {
    console.log('非触摸屏设备(如PC端)');
}

2. 使用 navigator.maxTouchPoints

navigator.maxTouchPoints 属性返回一个数字,表示设备可以同时跟踪的最大触摸点数。如果这个值大于0,则通常意味着设备是触摸屏。

if (navigator.maxTouchPoints > 0) {
    console.log('触摸屏设备');
} else {
    console.log('非触摸屏设备(如PC端)');
}

3. 使用 'pointer' 事件

pointer 事件是一组事件,旨在统一鼠标、触摸屏和笔输入。通过监听这些事件,你可以检测到用户输入的类型。

window.addEventListener('pointerdown', function(event) {
    if (event.pointerType === 'touch') {
        console.log('触摸屏设备');
    } else {
        console.log('非触摸屏设备(如PC端)');
    }
});

4. 使用第三方库

还有一些第三方库,如 Modernizr,可以帮你更方便地检测设备类型。例如:

if (Modernizr.touchevents) {
    console.log('触摸屏设备');
} else {
    console.log('非触摸屏设备(如PC端)');
}

5. 使用CSS媒体查询(适用于响应式设计)

虽然这不是直接用JavaScript判断,但你可以通过CSS媒体查询来应用不同的样式规则,从而间接影响你的用户体验。例如:

@media (hover: none) and (pointer: coarse) {
    /* 针对触摸屏设备的样式 */
}

总结

根据你的具体需求,你可以选择上述方法中的一种或多种来检测设备类型。通常,第一种和第二种方法是最直接和常用的方式。如果你需要更复杂的输入检测或希望减少对浏览器的依赖,使用'pointer'事件或第三方库可能是更好的选择。对于响应式设计,CSS媒体查询也是一个很好的工具。

注意:有些设备既支持触摸,又支持鼠标事件。实际开发中要注意这点。都要兼容。可以获取事件的  event.type 来判断触发的是什么事件。