当前位置: 首页 > news >正文

js判断当前设备是否为移动端

背景

响应式布局:随着移动互联网的发展,用户通过手机和平板访问网页的比例越来越高。为了提供更好的用户体验,开发者需要根据设备类型调整页面布局、字体大小、图片尺寸等,以确保在不同屏幕尺寸上都有良好的显示效果。
交互方式差异:移动设备和桌面设备的交互方式有很大不同(例如触控屏 vs 鼠标点击),因此需要针对不同的交互方式进行适配。

编码实战

/*** 判断当前设备是否为移动设备(包括手机、平板、微信小程序 WebView 等)* @returns {boolean} 是否为移动端*/
function isMobileDevice() {// 获取浏览器的 User-Agent 字符串,用于识别操作系统、浏览器类型等信息const ua = navigator.userAgent || navigator.vendor || window.opera;/*** 检测是否是常见的移动设备* 匹配关键词:Android、iPhone、iPad、iPod、BlackBerry、webOS、Windows Phone、SymbianOS、IEMobile、Opera Mini* 适用于大多数主流手机和平板设备*/const isMobile = /Android|iPhone|iPad|iPod|BlackBerry|webOS|Windows Phone|SymbianOS|IEMobile|Opera Mini/i.test(ua);/*** 检测是否是平板设备(如 iPad、Kindle Fire、黑莓 PlayBook 等)* 特别处理了 Amazon Fire 平板的特征码 KFxxx* 注意:iPadOS 在桌面 Safari 中 UA 可能显示为 Macintosh,所以补充了 touch 关键词检测*/const isTablet = /ipad|playbook|silk|(android.*\bkf[a-z]{2,6}\b)|kindle|macintosh.*touch/i.test(ua);/*** 检测设备是否支持触控屏* 使用多种方式兼容不同浏览器:- 'ontouchstart' in window:标准触控事件是否存在- navigator.maxTouchPoints:多点触控支持数量(现代浏览器)- navigator.msMaxTouchPoints:IE 和旧版 Edge 兼容*/const hasTouchScreen = (('ontouchstart' in window) ||(navigator.maxTouchPoints > 0) ||(navigator.msMaxTouchPoints > 0));/*** 判断是否是 PC 端的微信环境(用于后续排除 PC 微信误判)* 如果 UA 中包含 Windows NT 或 Macintosh,则认为是桌面端微信*/const isPcInWeChat = /Windows NT|Macintosh/.test(ua);/*** 判断是否是微信内置浏览器或小程序 WebView* 但需要排除 PC 微信的情况(否则可能误判为移动端)*/const isWeChatWebView = /micromessenger/i.test(ua) && !isPcInWeChat;/*** 判断是否是从微信小程序加载的 Web 页面(可选)* 小程序加载 web-view 时可以通过 URL 参数传递标志位* 示例:<web-view src="https://yourdomain.com/page?from=miniprogram" />*/const isInMiniProgram = /from=miniprogram/.test(window.location.search);/*** 最终判断逻辑:* 满足以下任意条件即判定为“移动端”:** 1. 是常见移动设备(如 Android、iPhone)* 2. 是平板设备(如 iPad、Kindle)* 3. 支持触控屏,并且窗口宽度小于 1024px(模拟移动端体验)* 4. 是微信小程序 WebView(非 PC 环境)* 5. 是从微信小程序加载的页面(通过 URL 参数识别)*/return isMobile || isTablet || (hasTouchScreen && window.innerWidth < 1024) || isWeChatWebView || isInMiniProgram;
}

无注释版本

function isMobileDevice() {const ua = navigator.userAgent || navigator.vendor || window.opera;const isMobile = /Android|iPhone|iPad|iPod|BlackBerry|webOS|Windows Phone|SymbianOS|IEMobile|Opera Mini/i.test(ua);const isTablet = /ipad|playbook|silk|(android.*\bkf[a-z]{2,6}\b)|kindle|macintosh.*touch/i.test(ua);const hasTouchScreen = (('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0));const isPcInWeChat = /Windows NT|Macintosh/.test(ua);const isWeChatWebView = /micromessenger/i.test(ua) && !isPcInWeChat;const isInMiniProgram = /from=miniprogram/.test(window.location.search); // 如果你控制了 URLreturn isMobile || isTablet || (hasTouchScreen && window.innerWidth < 1024) || isWeChatWebView || isInMiniProgram;
}

相关文章:

  • CSV数据处理全指南:从基础到实战
  • java 项目登录请求业务解耦模块全面
  • mysql 合集
  • 软件项目交付阶段,验收报告记录了什么?有哪些标准要求?
  • Oracle OCP认证考试考点详解083系列16
  • 《计算机组成原理》第 6 章 - 计算机的运算方法
  • 链表题解——相交链表(力扣160 easy)
  • <b> 与 <span> 等行内元素添加 margin-top 或 margin-bottom 不生效问题
  • 高精度微型导轨在3D打印机中有多重要?
  • 多相电机驱动控制学习(1)——基于双dq坐标系的六相/双三相PMSM驱动控制
  • 泰迪杯特等奖案例深度解析:基于多模态时空图神经网络的工业园区碳排放实时监测与优化系统
  • Python训练营打卡Day38
  • Common JS和ES Module的区别
  • 《OpenFeign 最佳实践:三大优雅调用远程服务的方式》​
  • mysql explain使用
  • 基于springboot的校园商铺管理系统的设计与实现
  • HikariCP连接池使用和源码分析
  • NB-IoT NPUSCH(三)-资源映射
  • 一种C# 的SM4 的 加解密的实现,一般用于医疗或者支付
  • 多线程(1)
  • 网站建设公司列表网/如何创建一个自己的网站
  • 怎么做网站用dreamwer/广东疫情最新资讯
  • 企业网站建设应注意哪些问题/北京百度搜索优化
  • 做平面设计赚钱靠谱的网站有哪些/快速排名工具免费
  • js网站登录怎么做/怎么优化电脑系统
  • 网站建设单选题/网站seo服务公司