检测PC端和移动端的方法总结

摘要:
在艰苦的练习中,昨天该公司要求制作一个页面,其中涉及检测终端的问题。如果是移动设备,它将跳转到指定的网页。过去,响应式布局只需要使用@mediascreen来实现布局的差异化适配,但现在不仅仅是布局,还需要移动终端的一些其他动作。所以我读了一些信息并做了一个总结,或者使用@mediascreen想法:css使用媒体查询。当屏幕小于760px时,元素的样式将发生变化,然后通过js检测变化

正在苦逼的实习中,昨天公司让做一个页面,涉及到检测终端的问题,如果是手机设备,就跳转到指定的网页上,以前写响应式布局只要用@media screen来实现布局的差异化适应,但是现在不仅仅是布局,还要针对移动端做一些别的动作,所以看了点资料,做个总结

方法一、还是用@media screen

思路:css使用媒体查询,当屏幕小于760px时,使某个元素的样式发生改变,然后通过js检测到这个改变,就可以知道现在切换到移动端了

css代码:

/* 检测小屏幕- */
@media only screen and (max- 760px) {
  #some-element { display: none; }
}

 js代码:

$( document ).ready(function() {      
  var isMobile = false;//默认是pc端
  if( $('#some-element').css('display')=='none') {
	is_mobile = true;       
  }
  if (isMobile == true) {
	//对移动端进行处理
  }
});

方法二、通过navigator.userAgent字符串检测

思路:Navigator对象包含有关浏览器的信息,通过检测userAgent字符串,然后使用正则表达式进行匹配,我们自然就能知道用户是否在使用移动端的浏览器啦

先上个简化版的,意思意思下

var isMobile = false;
// 检测userAgent
if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
  isMobile = true;
}
if(isMobile){
  //移动端的处理逻辑
}

 其实还可以用jQuery,but jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version:

$.browser.device = (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent.toLowerCase()));

通过上面那段代码基本就能检测到我们能常用的移动终端了,但是后来我在stackoverflow发现一哥们检测得更加全面牛逼:

var isMobile = false;//默认PC端
// 检测userAgent
if(/(android|bbd+|meego).+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) 
    || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(navigator.userAgent.substr(0,4))) 
{
  isMobile = true;
}
if(isMobile){
  //移动端的处理逻辑
}

方法三、通过Window.matchMedia()检测

思路:Window.matchMedia()用来检查mediaquery语句,扔个MDN的传送门。它返回一个MediaQueryList对象。该对象有两个属性
media:查询语句的内容。
matches:如果查询结果为真,值为true,否则为false

代码实现如下:

var isMobile = false;//默认PC端
var result = window.matchMedia("only screen and (max- 760px)");
if (result.matches){ 
  isMobile = true;
}

如果在PC端上使用Window.matchMedia()的话IE10以下是不支持的,但是我们只是用来检测终端哈,IE不支持就算了,移动端上安卓3.0以上都没有问题,so~~

方法四、检测移动端的TouchEvent事件

思路:使用document.createEvent()创建TouchEvent事件,如果成功那就是移动端了,返回true,pc端是没有TouchEvent事件的,所以会出错,返回false

代码实现:

var isMobile = false;//默认PC端
function mobile() {
	try{
		document.createEvent("TouchEvent");
		return true;
	}
	catch(e){
		return false;
	}
}
isMobile=mobile();

 简洁方便~~

方法五、使用Device.js库

这个库就没啥好讲的了,自己跟着套代码就OK

github地址 https://github.com/matthewhudson/device.js

不想看英文的孩子,扔个中文教程 https://segmentfault.com/a/1190000000373735

免责声明:文章转载自《检测PC端和移动端的方法总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SVG实现描边动画css3 animation实现逐帧动画下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

移动端开发碰到一个坑

移动端开发真是不断踩坑,今天在做一个移动端的组件,又发现了一个坑,记录到日志里面,做个记录,以便以后再遇到这个问题有个记录可以参考。 在ios中的chrome浏览器中,手指从屏幕上方移动出屏幕(一定要经过屏幕边缘划出屏幕)时,不能触发touchend的事件,但是这个touchend事件并不是消失了,而是等到下次触摸屏幕的时候才会触发。 这个问题搞得我想到无...

Fiddler_ 移动端抓包配置IOS&Android,Fiddler获取APP端的流量

1.移动端设备抓包配置 Tools->Fiddler Options->Connections->勾选Allow remote computers to connect,重启fiddler IOS和Android移动端设置如下: APP-》设置-》Wlan网络要和电脑端的fiddler网络一样 移动端点击网络名字-》代理-》...

移动端边框1像素的问题

前两天设计说我移动端为什么边框看起来像2px。 我代码检查了大半天,是1px啊。 仔细比对了很久,不得不承认,设计的眼睛比我的眼睛好太多太多了。 造成这个的原因是手机分辨率的问题。 原理都在代码里了。也不多说。下面这个代码重点是css的代码,html全部代码都贴了。less的代码就不分享了,我自己收藏着。 <!DOCTYPE html> &l...

移动web前端开发小结

注意:Chrome模拟手机的显示的界面是有误差的,强烈建议一定要在真机测试自己的移动端页面(以移动端页面为准)。 Android组件:WebView兼容问题 WebView存在跨域问题,需要在WebView配置。 1.页面高度渲染错误,页面的高度是否包含了导航,(华为手机就是偏偏有底部菜单) 设置窗口高度document.documentElement.st...

前端UI框架小汇总

前言: 近期,小弟根据GitHub、前端社区、掘金等平台对当前流行的前端UI框架的进行了小小的整理和汇总(ps:前端UI框架的应用是通过GitHub star数,社区热度和使用范围等进行的粗略的汇总【不分先后】)。希望对寻找UI框架的小伙伴们提供点帮助。 以下对前端UI框架的移动端、PC端和混合APP的应用进行了列举。 移动端UI框架 Mint UI(饿了么...

【新特性速递】FineUIPro/Mvc/Core 全新移动端访问体验(示例首页)!

移动端支持 虽然 FineUIPro 早在 2016 年就已经完成对移动端的适配工作,并新增了 50 多个官网示例。 并且,我们也新增了一个移动端的首页http://pro.fineui.com/mobile/main.aspx,通过手机浏览器打开这个页面,看到的效果还是很不错的: 菜单的层次切换也是典型的左右滑动效果,看下动图: 示例首...