navigator.userAgent

最简单的方法就是分析浏览器的 user agent 字符串,它包含了设备信息。通过判断是否包含Mobile、Android、iPhone等关键字,就可以认定是移动设备。

if (/iPhone|iPod|Android|ios|iPad|BlackBerry|Mobile/i.test(navigator.userAgent)) {// 当前设备是移动设备
}// 另一种写法
if (navigator.userAgent.match(/Mobile/i) ||navigator.userAgent.match(/Android/i) ||navigator.userAgent.match(/iPhone/i)
) {// 当前设备是移动设备
}

Android 或 iOS

let browser = {versions: function() {var ua = navigator.userAgent;return {//移动终端浏览器版本信息 trident: ua.indexOf('Trident') > -1, //IE内核presto: ua.indexOf('Presto') > -1, //opera内核webKit: ua.indexOf('AppleWebKit') > -1, //苹果、谷歌内核gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') == -1, //火狐内核mobile: !!ua.match(/AppleWebKit.*Mobile.*/) || !!ua.match(/AppleWebKit/), //是否为移动终端ios: !!ua.match(/\(i[^;]+;( U;)? CPUa.+Mac OS X/), //ios终端android: ua.indexOf('Android') > -1 || ua.indexOf('Linux') > -1, //android终端或者uc浏览器iPhone: ua.indexOf('iPhone') > -1 || ua.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器iPad: ua.indexOf('iPad') > -1, //是否iPadwebApp: ua.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部winPhone: ua.indexOf('Windows Phone') > -1 //是否为Windows Phone};}(),language: (navigator.browserLanguage || navigator.language).toLowerCase()
}if (browser.versions.ios || browser.versions.iPhone || browser.versions.iPad) {window.location="https://itunes.apple.com/xxx";
}
else if (browser.versions.android) {window.location="http://xxx/xxx.apk";
}// console.log("语言版本: " + browser.language);
// console.log(" 是否为移动终端: " + browser.versions.mobile);
// console.log(" ios终端: " + browser.versions.ios);
// console.log(" android终端: " + browser.versions.android);
// console.log(" 是否为iPhone: " + browser.versions.iPhone);
// console.log(" 是否iPad: " + browser.versions.iPad);

window.orientation

侦测屏幕方向,判断横屏或竖屏
window.orientation属性用于获取屏幕的当前方向,只有移动设备才有这个属性,桌面设备会返回undefined。

function orient() {if (window.orientation == 0 || window.orientation == 180) {$("body").attr("class", "portrait");orientation = 'portrait';return false;}else if (window.orientation == 90 || window.orientation == -90) {$("body").attr("class", "landscape");orientation = 'landscape';return false;}
}

缺点:iOS15 中 Safari 才支持该属性;

window.screen,window.innerWidth

window.screen 对象返回用户设备的屏幕信息,该对象的width属性是屏幕宽度(单位为像素)。

const getBrowserWidth = function() {if (window.innerWidth < 768) {return "xs";} else if (window.innerWidth < 991) {return "sm";} else if (window.innerWidth < 1199) {return "md";} else {return "lg";}
};

touch 事件

手机浏览器的 DOM 元素可以通过ontouchstart属性,为touch事件指定监听函数。

if ("ontouchstart" in window) {startEvt = "touchstart";moveEvt = "touchmove";endEvt = "touchend";
} else {startEvt = "mousedown";moveEvt = "mousemove";endEvt = "mouseup";
}

window.matchMedia()

matchMedia() 返回一个新的 MediaQueryList 对象,表示指定的媒体查询字符串解析后的结果。
matchMedia()方法的值可以是任何一个 CSS @media 规则 的特性, 如 min-height, min-width, orientation 等。
window.matchMedia() 方法接受一个 CSS 的 media query 语句作为参数,判断这个语句是否生效。

MediaQueryList 对象有以下两个属性:

  • media:查询语句的内容。
  • matches:用于检测查询结果,如果文档匹配 media query 列表,值为 true,否则为 false。
window.matchMedia("only screen and (max-width: 760px)").matches;

上例中window.matchMedia()的参数是一个 CSS 查询语句,表示只对屏幕宽度不超过 700 像素的设备生效。它返回一个对象,该对象的matches属性是一个布尔值。如果是true,就表示查询生效,当前浏览器匹配此条件。

除了通过屏幕宽度判断,还可以通过指针的精确性判断。

window.matchMedia("(pointer:coarse)").matches;
window.matchMedia("(any-pointer:coarse)").matches;

CSS 语句pointer:coarse表示当前设备的指针是不精确的。由于手机不支持鼠标,只支持触摸,所以符合这个条件。
有些设备支持多种指针,比如同时支持鼠标和触摸。pointer:coarse只用来判断主指针,此外还有一个any-pointer命令判断所有指针。

MediaQueryList 对象还可以监听事件。通过监听,在查询结果发生变化时,就调用指定的回调函数。

addListener(functionref) 添加一个新的监听器函数,该函数在媒体查询的结果发生变化时执行。
removeListener(functionref) 从媒体查询列表中删除之前添加的监听器。 如果指定的监听器不在列表中,则不执行任何操作。

function myFunction(x) {if (x.matches) { // 媒体查询document.body.style.backgroundColor = "yellow";} else {document.body.style.backgroundColor = "pink";}
}var x = window.matchMedia("(max-width: 700px)")
myFunction(x) // 执行时调用的监听函数
x.addListener(myFunction) // 状态改变时添加监听器

js检测屏幕的方法总结 2021-10-05相关推荐

  1. js检测数据类型的方法你都掌握了几个?

    数据类型检测 1 typeof检测 2 var obg = {}; 3 var ary = []; 4 var reg = /^$/; 5 var fn = function () {}; 6 var ...

  2. CSS层叠样式表Cascading Style Sheets(2021.10.05)

    一.CSS简介 1.优缺点 优点:丰富的样式描述: 样式和结构的分离,便于维护和管理: 减少代码量,加快页面加载: 样式代码复用性强: 多个页面可以使用同一个CSS代码: 缺点:浏览器对CSS支持程度 ...

  3. js检测字符串方法大全

    js检测字符串方法大全 <script> /* function obj$(id)                      根据id得到对象 function val$(id)      ...

  4. 检测屏幕颜色显示坏点的一个小方法。(还有别的)

    通过 debug 检测屏幕颜色显示坏点.低格硬盘等等技巧 通过如下方法,可以方便地在手头么有工具特情况下检测LCD显示器的坏点 购买LCD显示器最忌有亮点或暗点,我们可以借助相关的检测软件来辅助查看, ...

  5. mac开发-10.15检测屏幕录制权限

    在Mac os 10.15之后,屏幕录制权限需要获取才能正确录屏,否则只能录制桌面背景以及自身app的影像.即可以截屏,但截不到其他app的内容. 文章目录 屏幕录制权限检测 屏幕录制授权申请 CGW ...

  6. js 数据类型_js中检测数据类型的方法汇总

    回顾一下js中数据类型分为两大类,基础类型和引用数据类型,主要有: 基本数据类型 Number String Boolean Null Undefined Symbol 复杂数据类型 Array Fu ...

  7. php如何让图片铺满屏幕,如何解决js获取屏幕大小并且让图片自适应的方法

    在写h5页面的时候,经常会需要将图片自适应大小,一般都是用等比例的缩放,这就有个问题,当上传的图片不是一个规格时就会出现展示图片不完美. 为了解决这个问题,我们可以通过js去获取图片的大小,然后在根据 ...

  8. php自动适应屏幕大小,如何解决js获取屏幕大小并且让图片自适应的方法

    在写h5页面的时候,经常会需要将图片自适应大小,一般都是用等比例的缩放,这就有个问题,当上传的图片不是一个规格时就会出现展示图片不完美. 为了解决这个问题,我们可以通过js去获取图片的大小,然后在根据 ...

  9. 聚类,k-mean方法,基于密度的方法:DBSCAN,孤立点检测——数据分析与R语言 Lecture 10

    聚类,k-mean方法,基于密度的方法:DBSCAN,孤立点检测--数据分析与R语言 Lecture 10 聚类 dist( )函数 各种类与类之间距离计算的方法 动态聚类:K-means方法 kme ...

最新文章

  1. R语言读写二进制文件:WriteBin()、readBin()
  2. virtualbox在装centos5.6时自协把virtualbox add-on 装上了
  3. jira在linux下面的安装和配置
  4. mysql clean up_svn之clean up操作
  5. Android Json解析与总结
  6. djnago 模型 新建对象id为空
  7. AWS 人工智能黑客马拉松正式开启!用实力演绎科技向善!
  8. 爱奇艺取消剧集超前点播
  9. 最完整的div+css技术入门知识(一)
  10. 【论文投稿】SOTA论文也未必能被接收,谷歌科学家Eric Jang谈顶会审稿标准
  11. 中职网络安全大赛攻防阶段加固(仅供参考!!!)
  12. 74LS138-三人表决电路
  13. 工业物联网技术体系包括哪些
  14. 最强脱单指南:如何通过区块链应用快速找到女朋友?
  15. 分析如烹饪:让我们一起做数据大厨吧!
  16. elasticsearch for windows
  17. 事务及事务的四大特征是什么?
  18. MFC绘图工具High-speed Charting Control(VS2019)
  19. Java 实现抓包程序
  20. css为何不支持父元素选择器

热门文章

  1. CentOS7搭建Nacos Cluster
  2. 为什么要使用PM2及PM常用指令
  3. 斯坦福机器狗的设计与实现 四足机器人的组装全过程
  4. Photoshop教程三:影调调色工具
  5. C++函数指针、函数对象与C++11 function对象对比分析
  6. linux如何扫描文件格式,如何使用SANE最有用的命令在Linux中扫描文档
  7. Shell编程之函数与数组
  8. 华为机试真题 C++ 实现【堆栈中的剩余数字】
  9. 2021年知识付费行业十大趋势
  10. 两个forEach数据遍历相同的数据在复选框打钩jsp页面复选框更具传过来的数据勾选