Buộc chế độ định hướng "ngang"


91

Tôi đang cố đặt chế độ "ngang" cho ứng dụng của mình vì ứng dụng của tôi hoàn toàn không được thiết kế cho chế độ "dọc". Làm thế nào tôi có thể làm điều đó?

Câu trả lời:


93

Bây giờ có thể với tệp kê khai ứng dụng web HTML5. Xem bên dưới.


Câu trả lời ban đầu:

Bạn không thể khóa một trang web hoặc một ứng dụng web theo một hướng cụ thể. Nó đi ngược lại hành vi tự nhiên của thiết bị.

Bạn có thể phát hiện hướng thiết bị bằng các truy vấn phương tiện CSS3 như sau:

@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
}

Hoặc bằng cách liên kết sự kiện thay đổi hướng JavaScript như sau:

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

Cập nhật vào ngày 12 tháng 11 năm 2014: Hiện có thể sử dụng tệp kê khai ứng dụng web HTML5.

Như đã giải thích trên html5rocks.com , bây giờ bạn có thể buộc chế độ định hướng bằng cách sử dụng một manifest.jsontệp.

Bạn cần đưa những dòng đó vào tệp json:

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

Và bạn cần đưa tệp kê khai vào tệp html của mình như sau:

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

Không chắc chắn chính xác những gì hỗ trợ trên tệp kê khai ứng dụng web cho chế độ khóa định hướng, nhưng Chrome chắc chắn ở đó. Sẽ cập nhật khi tôi có thông tin.


1
Có, ứng dụng web cũng vậy. Ngay cả khi bạn "lưu" trang web của mình vào màn hình chính trên iPhone hoặc iPad, ứng dụng web sẽ thay đổi hướng của nó.
Rémi Breton

2
Theo caniuse.com, tệp kê khai có thể được sử dụng kể từ Android 4.1. Xem caniuse.com/#feat=offline-apps
Rémi Breton

1
Làm cách nào để biết tệp kê khai đang được gọi? Nó không hoạt động đối với tôi và không có gì hiển thị để được tải trong Mạng các công cụ phát triển của tôi mặc dù tệp kê khai ở cùng vị trí với index.html nơi nó được liên kết.
Ian S

3
Trong Chrome, bạn hiện có thể kiểm tra tab "Ứng dụng" ở chế độ Kiểm tra, có trang "Tệp kê khai" với liên kết trực tiếp đến tệp json của bạn và thông tin về nó.
drskullster

1
@ RémiBreton - bạn vẫn đang tìm kiếm thông tin đó, vậy bạn có thể cập nhật không? Chúng tôi đã kiên nhẫn chờ đợi trong nhiều năm!
ashleedawg

46
screen.orientation.lock('landscape');

Sẽ buộc nó thay đổi thành và ở chế độ ngang. Đã thử nghiệm trên Nexus 5.

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


3
Không hoạt động trên Android bằng trình duyệt internet mặc định (không phải chrome) - bạn có ý kiến ​​gì không?
Antonios Tsimourtos

6
Không được triển khai cho Safari (iOS và macOS): caniuse.com/#feat=screen-orientation
MBach

3
Chỉ cần lưu ý nhanh, điều này chỉ hoạt động sau khi vào chế độ toàn màn hình.
Thane Brimhall

2
Phương pháp này không được khuyến khích bởi Mozilla: developer.mozilla.org/en-US/docs/Web/API/Screen/lockOrientation Ngoài ra nó có khả năng tương thích trình duyệt rất nghèo
Fernando Garcia

1
Điều này thậm chí không hoạt động ở chế độ toàn màn hình trong chrome: |
Shamshirsaz.Navid

23

Tôi sử dụng một số css như thế này (dựa trên thủ thuật 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;
  }
}

3
Tôi đã sử dụng câu trả lời này .. tất cả tôi phải làm là thay đổi phương tiện truyền thông truy vấn từ landscapeđể portraitvà nó hoạt động như mong đợi@media screen and (orientation: portrait)
ymz

Đã chỉnh sửa câu trả lời để giúp những người trong tương lai. Việc xoay phải được áp dụng khi chế độ hiện tại là portrait(để nó có thể chuyển sang landscape).
lfarroco

Cảm ơn. Tôi đã tìm thứ giống như thế này suốt.
kém

Làm cách nào để tôi có thể áp dụng nó chỉ trên một trang thông qua page-id-xxx?
Homer

0

Tôi đã gặp vấn đề tương tự, đó là thiếu tệp tệp kê khai.json, nếu không tìm thấy trình duyệt quyết định với hướng là phù hợp nhất, nếu bạn không chỉ định tệp hoặc sử dụng đường dẫn sai.

Tôi đã sửa chỉ gọi đúng tệp kê khai.json trên tiêu đề html.

Tiêu đề html của tôi:

<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">

Và nội dung tệp 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"
  }
}

Để tạo biểu tượng và biểu tượng yêu thích của bạn, hãy sử dụng webtool này: https://realfavicongenerator.net/

Để tạo tệp kê khai của bạn, hãy sử dụng: https://tomitm.github.io/appmanifest/

PWA của tôi hoạt động tốt, hy vọng nó sẽ giúp!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.