javascript检测移动设备横竖屏


Posted in Javascript onMay 21, 2016

如何判断

移动设备提供了两个对象,一个属性,一个事件:

(1)window.orientation   属于window对象上一个属性;共有三个值 :0为竖屏模式(portrait),90为向左反转变为横屏模式(landscape),-90为向右反转变为横屏模式(landscape),最后180就是设备上下互换还是竖屏模式。

(2)orientationchange     是一个event,在设备旋转时,会触发此事件,如同PC上使用的resize事件。

这两个搭配起来使用,很容易就能获得设备的横竖屏状态,代码如下:

(function(){
 var init = function(){
  var updateOrientation = function(){
   var orientation = window.orientation;
   switch(orientation){
    case 90:
    case -90:
     orientation = 'landscape';
     break;
    default:
     orientation = 'portrait';
     break;
   }

   //do something
   //比如在html标签加一个状态
   //然后根据不同状态,显示不同大小
   document.body.parentNode.setAttribute('class',orientation);
  };

  window.addEventListener('orientationchange',updateOrientation,false);
  updateOrientation();
 };

 window.addEventListener('DOMContentLoaded',init,false);
})();

在css中就可以这样写:

/**竖屏 div边框显示蓝色**/
.portrait body div{
 border:1px solid blue;
}
/**竖屏 div边框显示黄色**/
.landscape body div{
 border:1px solid yellow;
}

当然还可以使用media queries的方式(推荐这种):

@media all and (orientation: portrait) {
 body div {
 border:1px solid blue;
 }
}
@media all and (orientation: landscape) {
 body div {
 border:1px solid yellow;
 }
}

兼容性

如果window.orientation或者orientationchange在设备中不存在的情况怎么处理呢?(一般一个不存在,另一个也不存在,反之)

在前期开发中,经常会用Chrome的device model调式,但是这个属性确实不存在,哪怎么获得这个值呢?简单的方式就是依据宽和高的大小比较判断,宽小于高为竖屏,宽大与高就是横屏。

获得结果的方式知道了,接下来就是怎么监听设备反转事件了,既然orientationchange不可用,就使用最基本的resize事件或者使用定时器检测,还是看代码:

(function(){
 var updateOrientation = function(){
  var orientation = (window.innerWidth > window.innerHeight) ? 'landscape' : 'portrait';

  document.body.parentNode.setAttribute('class',orientation);
 };

 var init = function(){

  updateOrientation();

  //每5秒检查一次
  //window.setInterval(updateOrientation,5000);
  
  //监听resize事件
  window.addEventListener('resize',updateOrientation,false);
 };

 window.addEventListener('DOMContentLoaded',init,false);
})();

最后,把以上两种方式合起来,就是一个完整的检测解决方案

(function(){
 var supportOrientation = (typeof window.orientation === 'number' &&
   typeof window.onorientationchange === 'object');

 var init = function(){
  var htmlNode = document.body.parentNode,
   orientation;
  var updateOrientation = function(){
   if(supportOrientation){
    orientation = window.orientation;
    switch(orientation){
     case 90:
     case -90:
      orientation = 'landscape';
      break;
     default:
      orientation = 'portrait';
      break;
    }
   }else{
    orientation = (window.innerWidth > window.innerHeight) ? 'landscape' : 'portrait';
   }
   htmlNode.setAttribute('class',orientation);
  };

  if(supportOrientation){
   window.addEventListener('orientationchange',updateOrientation,false);
  }else{
   //监听resize事件
   window.addEventListener('resize',updateOrientation,false);
  }

  updateOrientation();
 };

 window.addEventListener('DOMContentLoaded',init,false);
})();

总结

通过orientationchange事件来监听设备是否旋转,配合window.orientation属性判断当前是横屏还是竖屏,以便执行不同的操作。

Javascript 相关文章推荐
js 无提示关闭浏览器页面的代码
Mar 09 Javascript
JsDom 编程小结
Aug 09 Javascript
javascript在子页面中函数无法调试问题解决方法
Jan 17 Javascript
JavaScript将数字转换成大写中文的方法
Mar 23 Javascript
Jquery操作Ajax方法小结
Nov 29 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
Mar 07 Javascript
js中获取键盘事件的简单实现方法
Oct 10 Javascript
vue构建动态表单的方法示例
Sep 22 Javascript
小程序实现投票进度条
Nov 20 Javascript
js实现打字小游戏
Dec 17 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
Feb 28 Javascript
JS监听组合按键思路及实现过程
Apr 17 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
May 21 #Javascript
js+html5实现canvas绘制网页时钟的方法
May 21 #Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
May 21 #Javascript
javascript RegExp 使用说明
May 21 #Javascript
js+html5实现canvas绘制椭圆形图案的方法
May 21 #Javascript
jQuery DataTables插件自定义Ajax分页实例解析
Apr 28 #Javascript
Markdown+Bootstrap图片自适应属性详解
May 21 #Javascript
You might like
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
很可爱的输入框
2008/08/03 Javascript
select组合框option的捕捉实例代码
2008/09/30 Javascript
jQuery 动画基础教程
2008/12/25 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
ES6中Math对象新增的方法实例详解
2017/04/25 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
简单介绍Python中利用生成器实现的并发编程
2015/05/04 Python
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
Python实现的快速排序算法详解
2017/08/01 Python
python按行读取文件,去掉每行的换行符\n的实例
2018/04/19 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
请假条标准格式规范
2014/04/10 职场文书
旅游安全协议书
2014/04/21 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
课堂打架检讨书200字
2014/11/21 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
Python中的 Set 与 dict
2022/03/13 Python