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

推荐订阅源

S
Schneier on Security
The GitHub Blog
The GitHub Blog
Martin Fowler
Martin Fowler
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
有赞技术团队
有赞技术团队
GbyAI
GbyAI
F
Fortinet All Blogs
The Cloudflare Blog
爱范儿
爱范儿
IT之家
IT之家
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
博客园 - 【当耐特】
博客园_首页
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
量子位
C
Cisco Blogs
Latest news
Latest news
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
Stack Overflow Blog
Stack Overflow Blog
K
Kaspersky official blog
Spread Privacy
Spread Privacy
B
Blog
L
Lohrmann on Cybersecurity
Simon Willison's Weblog
Simon Willison's Weblog
I
Intezer
P
Privacy International News Feed
T
Tor Project blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
小众软件
小众软件
P
Proofpoint News Feed
T
Tailwind CSS Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Recorded Future
Recorded Future
S
Secure Thoughts
人人都是产品经理
人人都是产品经理
云风的 BLOG
云风的 BLOG
N
News and Events Feed by Topic
Last Week in AI
Last Week in AI
W
WeLiveSecurity
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security Affairs
宝玉的分享
宝玉的分享
D
Docker
Blog — PlanetScale
Blog — PlanetScale
雷峰网
雷峰网

博客园 - 华安

asp.netCore中给动态请求路径加客户端缓存 netCore中获取客户端真实的IP引起的思考 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 来判断触发的是什么事件。