我正在为移动设备建立一个网站。有一页特别适合在横屏模式下浏览。

是否有一种方法来检测访问该页面的用户是否在纵向模式下查看它,如果是的话,显示一条消息通知用户该页面在横向模式下查看最好?如果用户已经在横屏模式下查看,则不会出现任何消息。

所以基本上,我想让网站检测视口的方向,如果方向是纵向,然后显示一个警告消息,建议用户这个页面最好在横向模式下查看。


当前回答

另一种基于宽度/高度的比较来确定方向的方法:

var mql = window.matchMedia("(min-aspect-ratio: 4/3)");
if (mql.matches) {
     orientation = 'landscape';
} 

你在"resize"事件上使用它:

window.addEventListener("resize", function() { ... });

其他回答

如果您有最新的浏览器窗口。定向可能行不通。在这种情况下,使用下面的代码获取角度

var orientation = window.screen.orientation.angle;

这仍然是一个实验技术,你可以在这里检查浏览器兼容性

$(window).on("orientationchange",function( event ){
    alert(screen.orientation.type)
});

这就是我用的。

function getOrientation() {

    // if window.orientation is available...
    if( window.orientation && typeof window.orientation === 'number' ) {

        // ... and if the absolute value of orientation is 90...
        if( Math.abs( window.orientation ) == 90 ) {

              // ... then it's landscape
              return 'landscape';

        } else {

              // ... otherwise it's portrait
              return 'portrait';

        }

    } else {

        return false; // window.orientation not available

    }

}

实现

window.addEventListener("orientationchange", function() {

     // if orientation is landscape...
     if( getOrientation() === 'landscape' ) {

         // ...do your thing

    }

}, false);

经过一些实验,我发现旋转一个方向感知设备总是会触发浏览器窗口的调整大小事件。因此,在你的resize处理程序中,简单地调用这样一个函数:

function is_landscape() {
  return (window.innerWidth > window.innerHeight);
}

为了将所有这些伟大的注释应用到我的日常编码中,为了所有应用程序之间的连续性,我决定在我的jquery和jquery移动代码中使用以下内容。

window.onresize = function (event) {
  applyOrientation();
}

function applyOrientation() {
  if (window.innerHeight > window.innerWidth) {
    alert("You are now in portrait");
  } else {
    alert("You are now in landscape");
  }
}