Saya sedang membangun Aplikasi Web iPhone dan ingin mengunci orientasi ke mode potret. apakah ini mungkin? Apakah ada ekstensi web-kit untuk melakukan ini?
Harap dicatat ini adalah aplikasi yang ditulis dalam HTML dan JavaScript untuk Mobile Safari, BUKAN aplikasi asli yang ditulis dalam Objective-C.
orientation
iphone
Kevin
sumber
sumber
Jawaban:
Anda dapat menentukan gaya CSS berdasarkan orientasi viewport: Targetkan browser dengan body [orient = "landscape"] atau body [orient = "portrait"]
http://www.evotech.net/blog/2007/07/web-development-for-the-iphone/
Namun...
Pendekatan Apple untuk masalah ini adalah untuk memungkinkan pengembang untuk mengubah CSS berdasarkan perubahan orientasi tetapi tidak untuk mencegah orientasi ulang sepenuhnya. Saya menemukan pertanyaan serupa di tempat lain:
http://ask.metafilter.com/99784/How-can-I-lock-iPhone-orientation-in-Mobile-Safari
sumber
Ini adalah solusi yang cukup rumit, tetapi setidaknya sesuatu (?). Idenya adalah menggunakan transformasi CSS untuk memutar konten halaman Anda ke mode potret semu. Berikut ini kode JavaScript (dinyatakan dalam jQuery) untuk membantu Anda memulai:
Kode mengharapkan seluruh isi halaman Anda untuk hidup di dalam div tepat di dalam elemen tubuh. Ini memutar div 90 derajat dalam mode lansekap - kembali ke potret.
Dibiarkan sebagai latihan untuk pembaca: div berputar di sekitar titik tengahnya, sehingga posisinya mungkin perlu disesuaikan kecuali itu persegi sempurna.
Juga, ada masalah visual yang tidak menarik. Ketika Anda mengubah orientasi, Safari berputar perlahan, kemudian div tingkat atas terkunci hingga 90 derajat berbeda. Untuk lebih menyenangkan, tambahkan
ke CSS Anda. Ketika perangkat berputar, maka Safari melakukannya, kemudian konten halaman Anda. Memperdulikan!
sumber
Jawaban ini belum memungkinkan, tetapi saya mempostingnya untuk "generasi masa depan". Semoga suatu hari kita dapat melakukan ini melalui aturan CSS @viewport:
Berikut adalah halaman "Dapatkah Saya Menggunakan" (pada 2019 hanya IE dan Edge):
https://caniuse.com/#feat=mdn-css_at-rules_viewport_orientation
Spec (dalam proses penulisan):
https://drafts.csswg.org/css-device-adapt/#orientation-desc
MDN:
https://developer.mozilla.org/en-US/docs/Web/CSS/@viewport/orientation
Berdasarkan tabel kompatibilitas browser MDN dan artikel berikut ini, sepertinya ada beberapa dukungan di versi IE dan Opera tertentu:
http://menacingcloud.com/?c=cssViewportOrMetaTag
Spesifikasi JS API ini juga terlihat relevan:
https://w3c.github.io/screen-orientation/
Saya berasumsi bahwa karena itu mungkin dengan
@viewport
aturan yang diusulkan , bahwa itu akan mungkin dengan menetapkanorientation
dalam pengaturan viewport dalam sebuahmeta
tag, tetapi sejauh ini saya tidak berhasil.Jangan ragu untuk memperbarui jawaban ini ketika semuanya membaik.
sumber
Kode berikut digunakan di game html5 kami.
sumber
Saya datang dengan metode hanya CSS ini memutar layar menggunakan permintaan media. Kueri didasarkan pada ukuran layar yang saya temukan di sini . 480px tampaknya baik karena tidak ada / beberapa perangkat memiliki lebar lebih dari 480px atau kurang dari 480px.
sumber
orientation: landscape
tidak akan bekerja dengan baik dalam contoh saya @JustinPutneyScreen.lockOrientation()
menyelesaikan masalah ini, meskipun dukungannya kurang universal pada saat itu (April 2017):https://www.w3.org/TR/screen-orientation/
https://developer.mozilla.org/en-US/docs/Web/API/Screen.lockOrientation
sumber
Saya suka gagasan memberi tahu pengguna untuk mengembalikan ponselnya ke mode potret. Seperti disebutkan di sini: http://tech.sarathdr.com/featured/prevent-landscape-orientation-of-iphone-web-apps/ ... tetapi menggunakan CSS alih-alih JavaScript.
sumber
Mungkin di masa depan yang baru ia akan memiliki solusion ...
Adapun Mei 2015,
ada fungsi eksperimental yang melakukan itu.
Tapi itu hanya berfungsi di Firefox 18+, IE11 +, dan Chrome 38+.
Namun, ini belum berfungsi di Opera atau Safari.
https://developer.mozilla.org/en-US/docs/Web/API/Screen/lockOrientation#Browser_compatibility
Berikut adalah kode saat ini untuk browser yang kompatibel:
sumber
Meskipun Anda tidak dapat mencegah perubahan orientasi agar tidak berlaku, Anda dapat meniru tidak ada perubahan sebagaimana dinyatakan dalam jawaban lain.
Pertama-tama deteksi orientasi atau reorientasi perangkat dan, menggunakan JavaScript, tambahkan nama kelas ke elemen pembungkus Anda (dalam contoh ini saya menggunakan tag tubuh).
Kemudian jika perangkat lanskap, gunakan CSS untuk mengatur lebar badan ke tinggi viewport dan tinggi tubuh ke lebar viewport. Dan mari kita atur transformasi asal saat kita berada di sana.
Sekarang, reorientasi elemen tubuh dan geser (terjemahkan) ke posisi.
sumber
Ini, atau solusi CSS serupa, setidaknya akan mempertahankan tata letak Anda jika itu yang Anda cari.
Solusi root adalah memperhitungkan kemampuan perangkat daripada berusaha membatasi mereka. Jika perangkat tidak memungkinkan Anda membatasi yang tepat daripada peretasan sederhana adalah pilihan terbaik karena desain pada dasarnya tidak lengkap. Semakin sederhana semakin baik.
sumber
Dalam kopi jika ada yang membutuhkannya.
sumber
Terinspirasi dari jawaban @ Grumdrig, dan karena beberapa instruksi yang digunakan tidak akan berfungsi, saya menyarankan skrip berikut jika diperlukan oleh orang lain:
sumber
Saya memiliki masalah yang serupa, tetapi untuk membuat lansekap ... Saya percaya kode di bawah ini harus melakukan trik:
sumber
Klik di sini untuk tutorial dan contoh kerja dari situs web saya.
Anda tidak perlu lagi menggunakan peretasan hanya untuk melihat jQuery Mobile Screen Orientation atau Anda harus menggunakan PhoneGap lagi, kecuali Anda benar-benar menggunakan PhoneGap.
Untuk membuat ini bekerja di tahun 2015 kita perlu:
Dan salah satu plugin ini tergantung pada versi Cordova Anda:
plugin cordova tambahkan net.yoik.cordova.plugins.screenorientation
plugin cordova menambahkan cordova-plugin-layar-orientasi
Dan untuk mengunci orientasi layar cukup gunakan fungsi ini:
Untuk membukanya:
Orientasi yang mungkin:
portrait-primary Orientasi berada dalam mode potret primer.
portrait-secondary Orientasi dalam mode potret sekunder.
landscape-primary Orientasi berada dalam mode lansekap primer.
landscape-secondary Orientasi dalam mode lansekap sekunder.
portrait Orientasi dapat berupa potret-primer atau potret-sekunder (sensor).
landscape Orientasinya adalah landscape-primary atau landscape-secondary (sensor).
sumber