强制“横向”定向模式

IT技术 javascript device-orientation
2021-01-14 21:25:48

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

4个回答

现在可以使用 HTML5 webapp manifest。见下文。


原答案:

您无法以特定方向锁定网站或 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
}

或者通过像这样绑定一个 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 */
    }
});

2014 年 11 月 12 日更新:现在可以使用 HTML5 webapp manifest。

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

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

{
    "display":      "standalone", /* Could be "fullscreen", "standalone", "minimal-ui", or "browser" */
    "orientation":  "landscape", /* Could be "landscape" or "portrait" */
    ...
}

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

<link rel="manifest" href="manifest.json">

不确定 webapp manifest 对锁定方向模式的支持是什么,但 Chrome 肯定存在。当我有信息时会更新。

根据 caniuse.com,从 Android 4.1 开始可以使用清单。参见caniuse.com/#feat=offline-apps
2021-03-18 21:25:48
在 Chrome 中,您现在可以在检查模式下检查“应用程序”选项卡,有一个“清单”页面,其中包含指向您的 json 文件的直接链接和有关它的信息。
2021-03-30 21:25:48
是的,webapps 也是。即使您将网站“保存”到 iPhone 或 iPad 的主屏幕上,Web 应用程序也会改变其方向。
2021-04-05 21:25:48
如何判断清单是否被调用?它对我不起作用,尽管清单与其链接的 index.html 位于同一位置,但我的开发工具的网络中没有显示加载任何内容。
2021-04-12 21:25:48
@RémiBreton - 你还在寻找那个信息,所以你可以更新吗?我们已经耐心等待了多年!
2021-04-13 21:25:48
screen.orientation.lock('landscape');

将强制它更改为并保持横向模式。在 Nexus 5 上测试。

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

这甚至在 chrome 的全屏模式下也不起作用:|
2021-03-17 21:25:48
只是一个快速说明,这仅在进入全屏模式后才有效。
2021-03-23 21:25:48
使用默认互联网浏览器(不是 chrome)在 Android 上不起作用 - 有什么想法吗?
2021-03-26 21:25:48
Mozilla 不鼓励这种方法:developer.mozilla.org/en-US/docs/Web/API/Screen/lockOrientation并且它的浏览器兼容性非常差
2021-04-08 21:25:48
未为 Safari(iOS 和 macOS)实现:caniuse.com/#feat=screen-orientation
2021-04-09 21:25:48

我使用了一些这样的 css(基于css 技巧):

@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;
  }
}
我使用了这个答案..我所要做的就是将媒体查询从 更改landscapeportrait并且它按预期工作@media screen and (orientation: portrait)
2021-03-20 21:25:48
编辑了答案以帮助未来的人们。当前模式为 时应应用旋转portrait(以便它可以切换到landscape)。
2021-03-22 21:25:48
这次真是万分感谢!我发现您需要更改所有 CSS 文件(纵向模式下)中的每个vhtovwvwto vh......所以如果有人没有成功,可能是因为它。
2021-03-23 21:25:48
我如何才能通过 page-id-xxx 仅在单个页面上应用它?
2021-04-02 21:25:48
谢谢。我一直在寻找这样的东西。
2021-04-07 21:25:48

我遇到了同样的问题,这是一个缺少 manifest.json 文件,如果没有找到,浏览器会根据方向决定最适合,如果您不指定文件或使用错误的路径。

我修复了在 html 标头上正确调用 manifest.json 的问题。

我的 html 标题:

<meta name="application-name" content="App Name">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<link rel="manifest" href="manifest.json">
<meta name="msapplication-starturl" content="/">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#">
<meta name="msapplication-TileColor" content="#">
<meta name="msapplication-config" content="browserconfig.xml">
<link rel="icon" type="image/png" sizes="192x192" href="android-chrome-192x192.png">
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">
<link rel="mask-icon" href="safari-pinned-tab.svg" color="#ffffff">
<link rel="shortcut icon" href="favicon.ico">

和 manifest.json 文件内容:

{
  "display": "standalone",
  "orientation": "portrait",
  "start_url": "/",
  "theme_color": "#000000",
  "background_color": "#ffffff",
  "icons": [
  {
    "src": "android-chrome-192x192.png",
    "sizes": "192x192",
    "type": "image/png"
  }
}

要生成您的网站图标和图标,请使用此网络工具:https ://realfavicongenerator.net/

要生成您的清单文件,请使用:https : //tomitm.github.io/appmanifest/

我的 PWA 效果很好,希望能帮到你!