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

方法一、还是用@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和 . b r o w s e r 和 .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

检测PC端和移动端的方法总结(转)相关推荐

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

    (今天在做一个小插件的时候,涉及到检测终端的问题,首先想到的是方法一和比较复杂方法二,后来在网上一搜,发现了这篇总结,又学到了新知识.) 方法一.还是用@media screen 思路:css使用媒体 ...

  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. C 语言的诞生,竟然是一个失败的项目?
  2. linux里面查看llvm的版本,linux llvm安装
  3. Android 实现歌曲播放时歌词同步显示
  4. 1078 Hashing (25 分)【难度: 一般 / 知识点: 哈希表二次探测法】
  5. 1001 字符串“水”题(二进制,map,哈希)
  6. 平台型OA=高性价比OA?
  7. java map byte[],java中byte数组不能作为map的key使用
  8. gitee怎么仓库间传文件_实现一个简单的基于码云(Gitee) 的 Storage
  9. Web框架——Flask系列之CSRFToken详解(四)
  10. 更改窗口图标并将其显示在任务栏
  11. 兔子--html,js,php,ASP,ASP.NET,JSP的关系
  12. 剑指offer——面试题17:合并两个排序的链表
  13. 统计挖掘那些事(七)—— 如何直观地理解过拟合与欠拟合那些事~
  14. C++ 矩阵求a*b-1及行列式、伴随矩阵和逆矩阵思想及源代码
  15. apple tv 开发_如何在Apple TV上禁用Siri和定位服务
  16. 纵横职场20条黄金法则,知人善用的五个标准,李嘉诚14句经典财富格言
  17. ItextSharp 坐标系转换
  18. Java在手机平台上的Porting
  19. Sass、Scss、Less和Stylus区别总结
  20. 海康威视监控摄像头大华摄像头webrtc监控低时延无插件直播页面播放毫无延迟

热门文章

  1. 成像系统的高级PSF及MTF计算
  2. Linux下安装rdesktop远程windows
  3. HTML自学笔记(从零开始)
  4. DLMS协议 之 Frimware Upgrade
  5. LOAM 论文 LIDAR MAPPING 部分翻译
  6. 表单验证,手机号码验证,邮箱验证
  7. 8bit转16bit
  8. cdn搭建原理_一文搞懂CDN加速原理
  9. 河南省第十一届ACM大学生程序设计竞赛题目
  10. HLSL 学习笔记1 vertex shader, pixel shader