码云笔记前端博客
Home > JavaScript > js利用orientation属性判断移动设备是竖屏还是横屏的方法

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

2018-11-21 分类:JavaScript 作者:管理员 阅读(603)

本文共计2958个字,阅读时间预计8分钟,干货满满,记得点赞加收藏哦

在开发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,进行执行就可以了。

判断手机横屏竖屏方法

1
2
3
4
5
6
7
8
9
10
//判断手机横竖屏状态:
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是横屏还是竖屏的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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就实现了对应的功能,如下代码演示:

1
2
3
4
5
6
7
8
9
10
11
@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)之比,从而判定当前的横竖屏状态。如下代码所示:

1
2
3
4
5
6
7
8
9
10
11
12
(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);
})();

三、终极解决方案

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
(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属性判断手机设备横屏还是竖屏的全部方法,内容仅供参考如有所不当之处,欢迎留言指正。

「除特别注明外,本站所有文章均为码云笔记原创,转载请保留出处!」

赞(7) 打赏

觉得文章有用就打赏一下文章作者

支付宝
微信
7

觉得文章有用就打赏一下文章作者

支付宝
微信

上一篇:

下一篇:

你可能感兴趣

共有 2 条评论 - js利用orientation属性判断移动设备是竖屏还是横屏的方法

  1. 婆滴蜡 iPad Safari 604.1

    可以参考一下

  2. 婆滴蜡 iPad Safari 604.1

    正需要

博客简介

码云笔记 mybj123.com,一个专注Web前端开发技术的博客,主要记录和总结博主在前端开发工作中常用的实战技能及前端资源分享,分享各种科普知识和实用优秀的代码,以及分享些热门的互联网资讯和福利!码云笔记有你更精彩!
更多博客详情请看关于博客

精彩评论

站点统计

  • 文章总数: 476 篇
  • 分类数目: 13 个
  • 独立页面: 8 个
  • 评论总数: 228 条
  • 链接总数: 15 个
  • 标签总数: 1050 个
  • 建站时间: 525 天
  • 访问总量: 8648194 次
  • 最近更新: 2019年11月21日