强制"横向"方向模式

use*_*537 66 javascript

我正在尝试为我的应用程序强制"横向"模式,因为我的应用程序绝对不是为"纵向"模式设计的.我怎样才能做到这一点 ?

有什么建议 ?谢谢

Rém*_*ton 71

现在可以使用HTML5 webapp清单.见下文.


原始答案:

您无法以特定方向锁定网站或Web应用程序.这违背了设备的自然行为.

您可以使用CSS3媒体查询检测设备方向,如下所示:

@media screen and (orientation:portrait) {
    // CSS applied when the device is in portrait mode
}

@media screen and (orientation:landscape) {
    // CSS applied when the device is in landscape mode
}
Run Code Online (Sandbox Code Playgroud)

或者通过绑定这样的JavaScript方向更改事件:

document.addEventListener("orientationchange", function(event){
    switch(window.orientation) 
    {  
        case -90: case 90:
            /* Device is in landscape mode */
            break; 
        default:
            /* Device is in portrait mode */
    }
});
Run Code Online (Sandbox Code Playgroud)

11月12日更新:现在可以使用HTML5 webapp清单.

html5rocks.com所述,您现在可以使用manifest.json文件强制定向模式.

您需要将这些行包含在json文件中:

{
    "display":      "standalone", /* Could be "fullscreen", "standalone", "minimal-ui", or "browser" */
    "orientation":  "landscape", /* Could be "landscape" or "portrait" */
    ...
}
Run Code Online (Sandbox Code Playgroud)

你需要将清单包含在你的html文件中,如下所示:

<link rel="manifest" href="manifest.json">
Run Code Online (Sandbox Code Playgroud)

不完全确定webapp清单上对支持定位模式的支持是什么,但Chrome绝对存在.我有信息时会更新.

  • 根据caniuse.com,自Android 4.1起可以使用清单.请参阅http://caniuse.com/#feat=offline-apps (2认同)
  • 我如何判断清单是否正在被调用?它对我不起作用,并且没有显示在我的开发工具的网络中加载,尽管清单与它链接的index.html位于同一位置。 (2认同)
  • 在Chrome中,您现在可以在Inspect模式下查看"应用程序"选项卡,这里有一个"Manifest"页面,其中包含指向json文件的直接链接以及有关它的信息. (2认同)
  • @RémiBreton - 你还在寻找那个信息,所以你可以更新吗?我们已经耐心等待了*年!* (2认同)

小智 38

screen.orientation.lock('landscape');
Run Code Online (Sandbox Code Playgroud)

将迫使它改变并保持横向模式.在Nexus 5上测试过.

http://www.w3.org/TR/screen-orientation/#examples

  • 未针对Safari(iOS和macOS)实施:https://caniuse.com/#feat = screen-orientation (5认同)
  • 只是一个简短的说明,这仅在进入全屏模式后才有效。 (4认同)
  • 使用默认的互联网浏览器(不是Chrome)在Android上不起作用 - 任何想法? (2认同)
  • Mozilla 不鼓励这种方法:https://developer.mozilla.org/en-US/docs/Web/API/Screen/lockOrientation 而且它的浏览器兼容性非常差 (2认同)

pom*_*ber 33

I use some css like this (based on css tricks):

@media screen and (min-width: 320px) and (max-width: 767px) and (orientation: portrait) {
  html {
    transform: rotate(-90deg);
    transform-origin: left top;
    width: 100vh;
    height: 100vw;
    overflow-x: hidden;
    position: absolute;
    top: 100%;
    left: 0;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我使用了这个答案..我所要做的就是将媒体查询从“横向”更改为“纵向”,它按预期工作“@media screen and (orientation: Portrait)” (3认同)
  • 这次真是万分感谢!我发现你需要将所有CSS文件中的每个“vh”更改为“vw”,将“vw”更改为“vh”(纵向模式)......所以如果有人没有成功,可能就是因为它。 (3认同)