基于VUE实现判断设备是PC还是移动端
实际开发工作中会经常遇到一个需求,就是判断当前登录网页的设备是PC还是移动,要求PC端和移动端显示的是不同的网页内容。
那么我们就需要对当前登录设备进行判断。
使用navigator.userAgent字符串检测
我是在PC端开发完接到要做移动端的需求,而且移动端只有一个页面,我就统一放在了一个文件夹内。
首先在app.vue文件内,判断当前设备是pc端还是移动端。
methods:{ //添加判断方法 isMobile(){ letflag=navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|WindowsPhone)/i); returnflag; } }, mounted:{ if(this.isMobile){ alert("移动端"); this.$router.replace('/pc_index'); }else{ alert("pc端"); this.$router.replace('/m_index'); } }
接下来就略微介绍一下这个方法,其中用到了navigator.userAgent。
这个方法会返回一个只读的字符串,声明了浏览器在发送http请求时的用户代理头的值。例如:
//pc端输出结果: 用户代理:Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/79.0.3945.88Safari/537.36 //移动端输出结果: 用户代理:Mozilla/5.0(iPhone;CPUiPhoneOS11_0likeMacOSX)AppleWebKit/604.1.38(KHTML,likeGecko)Version/11.0Mobile/15A372Safari/604.1
.match方法用于在字符串内检索指定的值,或找到一个或多个正则表达式的匹配,返回值是检索到的值。
类似的方法还有indexOf()、laseIndexOf(),但是这两个方法返回的是匹配到的值的位置。
所以在判断方法中使用.match方法匹配所有的移动端型号,最后加的/i是表示不区分大小写。
使用window.matchMedia()检测
也就是利用媒体查询的方式进行判断。
window.matchMedia方法会返回一个新的mediaQueryList对象,表示指定的媒体查询字符串解析后的结果。例如:
varresult=window.matchMedia("(min-width:400px)").matches;
console.log(result)//true
window.matchMedia方法会返回两个参数,一个是media,就是查询的语句内容。另一个是matches,是返回的结果,为boolean类型。
根据当前设备的视口宽度判断是否是移动端设备。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。