(今天在做一个小插件的时候,涉及到检测终端的问题,首先想到的是方法一和比较复杂方法二,后来在网上一搜,发现了这篇总结,又学到了新知识。)

方法一、还是用@media screen

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

css代码:

/* 检测小屏幕- */
@media only screen and (max-width: 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|bb\d+|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){<br>  //移动端的处理逻辑<br>}

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

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

代码实现如下:

var isMobile = false;//默认PC端
var result = window.matchMedia("<code>only screen and</code> (max-width: 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端和移动端的方法总结相关推荐

  1. 检测PC端和移动端的方法总结(转)

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

  2. 【转载】PC端微信设置操作快捷键方法

    在电脑上使用微信的时候,有时候我们需要自定义PC版微信快捷键操作,支持自定义微信快捷键设置的有:发送消息快捷键.截屏快捷键.打开微信快捷键以及检测快捷键热键是否与其他软件设置冲突.并且自定义设置PC微 ...

  3. pc 页面在移动端怎么获取放大倍数、_百度移动搜索开放适配服务的3种方法

    为了提升用户的移动搜索结果浏览体验,百度移动搜索对具有对应手机站的PC站提供"开放适配"服务. 如果您同时拥有PC站和手机站,且二者能够在内容上对应,您可向百度"提交&q ...

  4. 计算机的iscsi配置,PC端的iSCSI参数设置方法

    PC端的iSCSI参数设置方法 上面介绍完NAS端的设置,接下来再来给大家介绍一下PC端的iSCSI设置,主要是实现在PC端上连接使用NAS上的iSCSI存储空间,这里我们以Windows 7 SP1 ...

  5. bat脚本中如何多次键盘输入并判断_电脑上如何多开微信?PC端多开微信的方法

    相信很多人都有多个微信,尤其是那些工作和生活分的比较开的人士,大家都知道一个电脑和可以登录多个QQ的,但是对于微信却不是这样.当你已经登录一个微信时,再打开微信时会自动弹出当前已经登录的微信窗口.本文 ...

  6. Splashtop Wired Xdisplay在PC端闪退的解决方法

    Splashtop Wired XdisplayPC端闪退,但勾选镜射模式正常工作的解决方法 前言: 利用SplashtopWiredXdisplay软件+数据线,可以让iPad成为扩展屏,具体操作可 ...

  7. springboot+shiro+redis+jwt实现多端登录:PC端和移动端同时在线(不同终端可同时在线)

    前言 之前写了篇 springboot+shiro+redis多端登录:单点登录+移动端和PC端同时在线 的文章,但是token用的不是 jwt 而是 sessionID,虽然已经实现了区分pc端和移 ...

  8. css 媒体查询 移动端,媒体查询(pc端,移动端不同布局)

    媒体查询语法: 1.内联写法:and之后必须有空格 @media screen and (min-width:960px //判断浏览器大小条件){ body{background:red} //常规 ...

  9. js判断客户端是PC端还是移动端访问

    js判断客户端是PC端还是移动端访问 方法一 (推荐) function IsPC(){ var userAgentInfo = navigator.userAgent;var Agents = ne ...

最新文章

  1. 【高并发】ThreadLocal学会了这些,你也能和面试官扯皮了!
  2. 智能理财在国内国外的发展现状
  3. 集成学习(ensemble learning)(一)
  4. kvm虚拟机端口映射(端口转发)到宿主机
  5. [BZOJ 3894]文理分科(最小割)
  6. C# 使用TCP创建HTTP客户程序
  7. IntelliJ IDEA编码设置
  8. 导入数据库时报错1067 – Invalid default value for ‘字段名’
  9. mysql行级锁升级_mysql innodb 行级锁升级
  10. Myeclipse8.5 反编译插件 jad 安装(转)
  11. 浅谈第三方电子支付平台测试方法的研究
  12. 任意文件夹下打开cmd窗口
  13. 七牛云 rs.php 没有,设置了callbackUrl,七牛只是在客户端上打印了json格式的key和hash,居然没有按照设置跳转回来..怎么弄?...
  14. 金士顿优盘不被电脑识别的小技巧
  15. mysql++简单应用_MySQL简单应用之视图(view)
  16. (1) 微信公众号注册
  17. 碧彩电子秤工程模式_碧彩秤操作手册.doc
  18. 【CXY】JAVA基础 之 Collection
  19. Linux Socket编程
  20. 嵌入式计算机的关键特征,与通用计算机的区别

热门文章

  1. D题:手势识别装置 -- 2018年TI杯大学生电子设计竞赛
  2. 电路和电子4.1.4直流偏置电路
  3. 微信小程序(页面获取组件实例对象来操做组件)
  4. 使用 Satis 搭建私有的 Composer 包仓库
  5. 检测触摸事件(用户触摸屏幕时提示信息)
  6. mess组网 中继_路由器mesh和中继组网的差别大不大
  7. Python编程新手看过来,如何求素数 (Python学习教程)
  8. mybatis-plus的sql注入器实现自定义全局sql操作原理解析
  9. Vue拼图验证组件(支持大小、形状、图片、偏差、范围的自定义)
  10. 极客日报:曝荣耀仍未获得谷歌Android授权;诋毁HarmonyOS的OPPO员工离职;微信圈子将停止运营