目录
(1)使用navigator.userAgent
最简单的方法就是分析浏览器的 user agent 字符串,它包含了设备信息。
JS 通过navigator.userAgent
属性拿到这个字符串,只要里面包含mobi
、android
、iphone
等关键字,就可以认定是移动设备。
if (/Mobi|Android|iPhone/i.test(navigator.userAgent)) {
// 当前设备是移动设备
}
// 另一种写法
if (
navigator.userAgent.match(/Mobi/i) ||
navigator.userAgent.match(/Android/i) ||
navigator.userAgent.match(/iPhone/i)
) {
// 当前设备是移动设备
}
这种方法的优点是简单方便,缺点是不可靠,因为用户可以修改这个字符串,让手机浏览器伪装成桌面浏览器。
(2)使用window.matchMedia()
CSS 通过 media query(媒介查询)为网页指定响应式样式。如果某个针对手机的 media query 语句生效了,就可以认为当前设备是移动设备。
window.matchMedia()
方法接受一个 CSS 的 media query 语句作为参数,判断这个语句是否生效。
let isMobile = window.matchMedia("only screen and (max-width: 760px)").matches;
上面示例中,window.matchMedia()
的参数是一个 CSS 查询语句,表示只对屏幕宽度不超过 760 像素的设备生效。它返回一个对象,该对象的matches
属性是一个布尔值。如果是true
,就表示查询生效,当前设备是手机。
除了通过屏幕宽度判断,还可以通过指针的精确性判断。
let isMobile = window.matchMedia("(pointer:coarse)").matches;
上面示例中,CSS 语句pointer:coarse
表示当前设备的指针是不精确的。由于手机不支持鼠标,只支持触摸,所以符合这个条件。
(3)使用react-device-detect
除上述方法,还可以使用工具包。推荐 react-device-detect,支持多种粒度的设备检测。
import {isMobile} from 'react-device-detect';
if (isMobile) {
// 当前设备是移动设备
}