- From: Marcos Cáceres <notifications@github.com>
- Date: Mon, 21 Jan 2019 19:36:04 -0800
- To: w3c/screen-orientation <screen-orientation@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/screen-orientation/pull/135/review/194823488@github.com>
marcoscaceres requested changes on this pull request. Some changes for us to discuss... > - var orientationChangeHandler = function() { - if (!screen.orientation.type.startsWith('landscape')) { - return; - } - screen.orientation.removeEventListener('change', orientationChangeHandler); - startInternal(); +async function start() { + try { + await screen.orientation.lock("landscape"); + } catch { + const inPortrait = window.matchMedia("(orientation: portrait)"); This seems to assume that the user is initially holding the device in portrait. However, they might already be in landscape mode. > - var orientationChangeHandler = function() { - if (!screen.orientation.type.startsWith('landscape')) { - return; - } - screen.orientation.removeEventListener('change', orientationChangeHandler); - startInternal(); +async function start() { + try { + await screen.orientation.lock("landscape"); + } catch { + const inPortrait = window.matchMedia("(orientation: portrait)"); + function orientationChangeListener() { + function detectOrientation(e) { + if (e.matches) { Similarly here, it could be that other orientations will match, not just "portrait"... so this should actually be checking for "matches === landscape". > } - - screen.orientation.addEventListener('change', orientationChangeHandler); - }); + window.removeEventListener( + "orientationchange", + orientationChangeListener + ); + inPortrait.removeListener(detectOrientation); + manualRotation(); + } + inPortrait.addListener(detectOrientation); + } + window.addEventListener("orientationchange", orientationChangeListener); + alert("To start, please rotate your screen to landscape"); Squishing all of the above, I get to: ```JS function start() { /* Start application when in correct orientation */ } async function rotate() { try { await screen.orientation.lock("landscape"); start(); } catch (err) { console.error(err); } // Not supported or not working, so... const matchLandscape = matchMedia("(orientation: landscape)"); if (matchLandscape.matches) return start(); // Already landscape! // Let's get the user to rotate manually... addEventListener("orientationchange", function listener() { matchPortrait.addListener(function mediaChange(e) { if (!e.matches) return; // Nope, not landscape! removeEventListener("orientationchange", listener); matchPortrait.removeListener(mediaChange); start(); }); }); alert("To start, please rotate your screen to landscape."); } ``` > <script> - var start = function() { - screen.orientation.lock('landscape-primary').then( - startInternal, - function() { - alert('To start, rotate your screen to landscape.'); +function manualRotation() { I think we should just inline this (see below). -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/w3c/screen-orientation/pull/135#pullrequestreview-194823488
Received on Tuesday, 22 January 2019 03:36:30 UTC