企业网站,个人博客等WordPress网站以及其他语言网站开发定制需求加QQ详聊。

js利用orientation属性判断移动设备是竖屏还是横屏的方法

JavaScript笔记 码云 102℃ 0评论
目录
[隐藏]

在开发web页面时,我们不仅要考虑pc端的自适应问题,还要应对移动设备屏幕的横屏和竖屏显示问题,最佳的实践方法就是流式布局,保证最大可能的利用有限的屏幕空间空间。但是用户在用手机端浏览页面时会存在着方向性,很多时候,我们需要为不同的屏幕方向来设计对应的应用显示模式,这个时候,实时地获知设备的模竖屏状态就显得极为重要,即横屏竖屏浏览效果。

js利用orientation属性判断移动设备是竖屏还是横屏的方法

window.orientation属性

window.orientation属性目前移动端的浏览器一般都支持window.orientation这个参数,通过这个参数可以判断出手机设备当前的屏幕方向。
屏幕方向对应的window.orientation值:
ipad: 90 或 -90 横屏
ipad: 0 或180 竖屏
Andriod:0 或180 横屏
Andriod: 90 或 -90 竖屏

onorientationchange事件

在每次屏幕方向在横竖屏间切换后,就会触发这个window事件。通过添加监听事件onorientationchange,进行执行就可以了。

判断手机横屏竖屏方法

//判断手机横竖屏状态:
function hengshuping(){
if(window.orientation==180||window.orientation==0){
alert("竖屏状态!")
}
if(window.orientation==90||window.orientation==-90){
alert("横屏状态!")
}
}
window.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", hengshuping, false);

然而在ipad、iphone网页开发中,我们很可能需要判断是横屏或者竖屏。
一起来看看如何用 jQuery 判断iPad、iPhone、Android是横屏还是竖屏的方法。

function orient() {
	if(window.orientation == 90 || window.orientation == -90) {
		//ipad、iphone竖屏;Andriod横屏
		$("body").attr("class", "landscape");
		orientation = 'landscape';
		return false;
	} else if(window.orientation == 0 || window.orientation == 180) {
		//ipad、iphone横屏;Andriod竖屏
		$("body").attr("class", "portrait");
		orientation = 'portrait';
		return false;
	}
}
//页面加载时调用
$(function() {
	orient();
});
//用户变化屏幕方向时调用
$(window).bind('orientationchange', function(e) {
	orient();
});

以下是网络搜集的2种方法:

一、使用mediaquery方式

这是一种更为方便的方式,使用纯CSS就实现了对应的功能,如下代码演示:

@media all and (orientation : landscape) {
    body {
        background-color: #ff0000;
    }
}
  
@media all and (orientation : portrait){
    body {
        background-color: #00ff00;
    }
}

二、低版本浏览器的平稳降级

如果目标移动浏览器不支持media query,同时window.orientation也不存在,则我们需要采用另外一种方式来实现————使用定时器“伪实时”地对比当前窗口的高(window.innerHeight)与宽(window.innerWidth)之比,从而判定当前的横竖屏状态。如下代码所示:

(function() {
	var updateOrientation = function() {
		var orientation = (window.innerWidth > window.innerHeight) ? "landscape" : "portrait";
		document.body.parentNode.setAttribute("class", orientation);
	};

	var init = function() {
		updateOrientation();
		window.setInterval(updateOrientation, 5000);
	};
	window.addEventListener("DOMContentLoaded", init, false);
})();

三、终极解决方案

将以上的两种解决方案整合在一起,就可以实现一个跨浏览器的解决方案,如下代码:

(function() {
	var supportOrientation = (typeof window.orientation == "number" && typeof window.onorientationchange == "object");
	var updateOrientation = function() {
		if(supportOrientation) {
			updateOrientation = function() {
				var orientation = window.orientation;
				switch(orientation) {
					case 90:
					case -90:
						orientation = "landscape";
						break;
					default:
						orientation = "portrait";
				}
				document.body.parentNode.setAttribute("class", orientation);
			};
		} else {
			updateOrientation = function() {
				var orientation = (window.innerWidth > window.innerHeight) ? "landscape" : "portrait";
				document.body.parentNode.setAttribute("class", orientation);
			};
		}
		updateOrientation();
	};

	var init = function() {
		updateOrientation();
		if(supportOrientation) {
			window.addEventListener("orientationchange", updateOrientation, false);
		} else {
			window.setInterval(updateOrientation, 5000);
		}
	};
	window.addEventListener("DOMContentLoaded", init, false);
})();

结束语

以上就是通过js的orientation属性判断手机设备横屏还是竖屏的全部方法,内容仅供参考如有所不当之处,欢迎留言指正。

转载请注明:码云笔记 » js利用orientation属性判断移动设备是竖屏还是横屏的方法

喜欢 (5)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. 可以参考一下
    婆滴蜡2018-11-24 10:36 回复
  2. 正需要
    婆滴蜡2018-11-24 10:32 回复