Does Mobile Safari support orientationchange?

jQuery Mobile: Styr enhedens orientering

25/12/2022

Rating: 4.34 (9078 votes)

I den moderne mobile verden er brugeroplevelsen altafgørende. En af de mest dynamiske aspekter af at bruge en smartphone eller tablet er muligheden for at rotere enheden og skifte mellem portræt- og landskabstilstand. For webudviklere, især dem der arbejder med jQuery Mobile, er det essentielt at kunne reagere på disse ændringer for at levere et responsivt og brugervenligt design. Dette er præcis, hvad orientationchange eventet i jQuery Mobile tillader os at gøre.

What is jQuery Mobile orientationchange event?
The jQuery Mobile orientationchange event triggers when a device orientation changes, either by turning the device vertically or horizontally. When bound to this event the callback function has the event object. The event object contains an orientation property equal to either "portrait" or "landscape".
Indholdsfortegnelse

Hvad er jQuery Mobiles Orientationchange Event?

jQuery Mobiles orientationchange event er designet til at give udviklere en nem måde at registrere, når en brugers enheds orientering ændrer sig. Dette sker typisk, når enheden drejes fra lodret (portræt) til vandret (landskab) eller omvendt. Når dette event udløses, modtager den tilknyttede callback-funktion et event-objekt, som indeholder en orientation egenskab. Denne egenskab vil være enten "portrait" eller "landscape", hvilket giver klar information om den nye orientering af enheden.

Det er vigtigt at bemærke, at jQuery Mobile er smart nok til at håndtere situationer, hvor det native orientationchange event ikke er tilgængeligt eller er deaktiveret. I sådanne tilfælde bindes der til browserens resize event. Dette sikrer en bredere kompatibilitet på tværs af forskellige enheder og browsere, selvom det kan have visse begrænsninger sammenlignet med det native event.

Understøttelse i Mobile Browsere

Moderne mobile browsere som Mobile Safari (på iOS) og Chrome (på Android) understøtter orientationchange eventet. Dette gør implementeringen relativt ligetil. Dog er der en faldgrube, man skal være opmærksom på: window.orientation egenskaben, som rapporterer rotationen i grader (typisk 0, 90, 180 eller 270 grader). Problemet er, at der ikke er en universel standard for, hvilken grad der repræsenterer hvilken orientering. Nogle enheder bruger 0° for portræt, mens andre bruger 0° for landskab. Denne inkonsistens kan gøre det vanskeligt at stole udelukkende på window.orientation til præcis orienteringsbestemmelse.

jQuery Mobiles tilgang med at bruge "portrait" og "landscape" strenge er derfor en mere robust løsning, da den abstraherer disse enhedsspecifikke forskelle væk.

Hvad Er Orientationchange Event (Generelt)?

Det er værd at bemærke, at orientationchange eventet, som det beskrives i webstandarder, af nogle betragtes som deprecated. Det betyder, at selvom det stadig understøttes af mange browsere for kompatibilitet, kan det blive fjernet i fremtidige standarder. Udviklere opfordres til at være forsigtige med at bruge det og undersøge alternativer, hvis muligt. Kompatibilitetstabeller kan være en god ressource til at vurdere, hvorvidt man kan stole på eventet på tværs af forskellige platforme og browserversioner.

How to detect orientation change in Windows 10?
To detect the orientation and orientation change we can use the “window.orientation” value that report the orientation in degrees (0, 90, -90, 180). More, we can “listen” t the event “orientationchange” to be notified when the device is rotated.

Det native orientationchange event udløses, når enhedens orientering ændres. Det er vigtigt at vide, at dette event typisk ikke kan afbrydes (non-cancelable) og ikke bobler op gennem DOM-træet (does not bubble).

Hvordan Detekteres Orientationsændringer?

At detektere en enheds orientering og reagere på ændringer er afgørende for at skabe adaptive brugeroplevelser. Mens CSS Media Queries er fremragende til at anvende forskellige stilarter baseret på orientering (f.eks. `orientation: portrait` eller `orientation: landscape`), giver de ikke mulighed for at udføre JavaScript-funktioner, når orienteringen ændres. Det er her, orientationchange eventet kommer ind i billedet.

Brug af window.orientation (med forbehold)

Som nævnt tidligere kan man bruge window.orientation til at få en numerisk værdi, der angiver enhedenhedens rotation i grader (0, 90, -90, 180). For eksempel kan enheder rapportere:

  • 0°: Portræt
  • 90°: Landskab (roteret med uret)
  • -90°: Landskab (roteret mod uret)
  • 180°: Omvendt Portræt

Man kan lytte til orientationchange eventet for at blive notificeret, når disse værdier ændrer sig. Et simpelt eksempel kunne se således ud:

window.addEventListener('orientationchange', function() { var orientation = window.orientation; console.log('Enhedens orientering er nu: ' + orientation + ' grader'); if (orientation === 0 || orientation === 180) { console.log('Enheden er i Portræt-tilstand.'); } else if (orientation === 90 || orientation === -90) { console.log('Enheden er i Landskab-tilstand.'); } }); 

Dog, som eksemplet med en Samsung Galaxy S viser, kan visse enheder have begrænsninger i, hvilke orienteringer de rapporterer, eller hvordan de rapporterer dem. Dette understreger vigtigheden af at bruge mere robuste metoder, som jQuery Mobile tilbyder.

Udfordringer med window.orientation

Udviklere har oplevet, at window.orientation kan være upålidelig. Nogle enheder kan rapportere forkerte værdier, især efter gentagne rotationer eller når den originale kodebase er kompleks. En udvikler beskrev en situation, hvor "efter at have rystet lidt til telefonen, begyndte den rapporterede orientering at blive omvendt (portræt for landskab og omvendt)". Dette kan skyldes en kombination af enhedens hardware, browserens implementering og den omkringliggende JavaScript-kode.

jQuery Mobile: En Løsning til Orientationshåndtering

jQuery Mobile sigter mod at forenkle denne proces. Ved at bruge sit eget orientationchange event, der abstraherer window.orientation og dets unøjagtigheder, giver det en mere konsistent oplevelse.

How to determine the rotation of a device in JavaScript?
The window object in JavaScript on iOS devices has an orientation property that can be used to determine the rotation of the device. The following shows the values window.orientation for iOS devices (e.g. iPhone, iPad, iPod) at different orientations. This solution also works for android devices as well.

Opsætning og Brug

For at bruge orientationchange eventet med jQuery Mobile, skal du først have jQuery og jQuery Mobile inkluderet i dit HTML-dokument. Derefter kan du binde en funktion til eventet:

$(document).on('pageinit', function() { $(window).on('orientationchange', function(event) { var newOrientation = event.orientation; console.log('jQuery Mobile registrerer: ' + newOrientation); if (newOrientation === 'portrait') { // Gør noget, når enheden er i portræt $('body').removeClass('landscape').addClass('portrait'); } else if (newOrientation === 'landscape') { // Gør noget, når enheden er i landskab $('body').removeClass('portrait').addClass('landscape'); } }); // Initial check for orientering, når siden indlæses var initialOrientation = $.mobile.getScreenHeight() <= $.mobile.getScreenAspect() ? 'portrait': 'landscape'; if (initialOrientation === 'portrait') { $('body').addClass('portrait'); } else { $('body').addClass('landscape'); } }); 

I dette eksempel bruger vi $(document).on('pageinit', ...) for at sikre, at koden kører, når en side i jQuery Mobile er fuldt initialiseret. Vi binder derefter en callback til orientationchange eventet på $(window). Callback-funktionen modtager et event-objekt, hvor event.orientation giver os den nye orientering som "portrait" eller "landscape". Vi tilføjer og fjerner CSS-klasser til body-tagget baseret på denne information, hvilket er en almindelig metode til at ændre layout og stilarter dynamisk.

Der er også inkluderet et initialt tjek for at bestemme enhedens orientering, når siden først indlæses, hvilket er vigtigt for at sikre, at de korrekte klasser anvendes fra starten.

Konfiguration: $.mobile.orientationChangeEnabled

jQuery Mobile giver dig mulighed for at styre, om orientationchange eventet skal bruges, eller om man skal falde tilbage på resize eventet via konfigurationsindstillingen $.mobile.orientationChangeEnabled. Som standard er denne indstilling sat til true, hvilket betyder, at det native orientationchange event foretrækkes.

Hvis du sætter $.mobile.orientationChangeEnabled = false; før jQuery Mobile initialiseres, vil jQuery Mobile automatisk bruge resize eventet i stedet. Dette kan være nyttigt i situationer, hvor du oplever problemer med det native event på specifikke enheder eller for at tvinge en bestemt adfærd.

Tabel: Fordele og Ulemper ved Orientationchange vs. Resize

AspektjQuery Mobile OrientationchangeBrowser Resize Event
Registrering af orienteringBruger typisk native orientationchange event, rapporterer "portrait" eller "landscape". Abstraherer enhedsspecifikke grader.Udløses ved enhver vinduesstørrelsesændring, ikke specifikt orientering. Kræver ofte brug af window.innerWidth/innerHeight eller window.orientation (med forbehold).
PræcisionGenerelt mere præcis til at detektere faktiske orienteringsskift, især hvis den native implementering er god.Kan være mindre præcis, da det reagerer på enhver ændring, hvilket kan inkludere zoom eller andre UI-ændringer. Rapportering via window.orientation kan være upålidelig.
YdeevneKan være mere ydeevne-optimeret, da det er et mere specifikt event.Kan udløses oftere end ønsket, hvilket potentielt kan påvirke ydeevnen, hvis det ikke håndteres korrekt.
KompatibilitetGod i moderne mobile browsere, men kan falde tilbage på resize. Ældre browsere eller specifikke enheder kan have problemer.Meget bred kompatibilitet, da resize er et fundamentalt browser-event.
KompleksitetSimpel at bruge med jQuery Mobile, da det giver klare værdier ("portrait", "landscape").Kræver mere logik til at fortolke ændringer og bestemme den faktiske orientering.

Ofte Stillede Spørgsmål (FAQ)

Q1: Hvad er den primære fordel ved at bruge jQuery Mobiles orientationchange over almindelige browser-events?

A1: Den primære fordel er den abstraktion, jQuery Mobile tilbyder. Det konverterer potentielt upålidelige numeriske værdier fra window.orientation til simple strenge ("portrait" eller "landscape"), hvilket gør din kode mere læsbar og mindre modtagelig for enhedsspecifikke fejl.

How do I change the orientation on my iPad?
You can unlock the orientation at any time by re-opening the Control Center and tapping the red-and-white "Lock" icon. Some apps don't support different orientations; for example, Minecraft PE necessitates landscape orientation, while apps like Instagram for iPhone will only appear in portrait mode. Make sure that your iPad has a side switch.

Q2: Er orientationchange eventet stadig relevant i 2023 og fremover?

A2: Selvom det er markeret som deprecated i nogle standarder, er det stadig bredt understøttet og meget nyttigt til at skabe adaptive mobile weboplevelser. For nuværende projekter er det en effektiv løsning. Det er dog altid en god idé at holde sig opdateret med de nyeste webstandarder og overveje native CSS-løsninger som container queries, hvis dit projekt primært fokuserer på moderne browsere og specifikke layout-tilpasninger.

Q3: Hvad hvis mit orientationchange event ikke udløses?

A3: Tjek først, om du har inkluderet både jQuery og jQuery Mobile korrekt. Sørg for, at din kode kører efter, at DOM er klar (f.eks. inden for `pageinit` eller `$(document).ready()`). Hvis problemet fortsætter, kan du prøve at deaktivere det native event ved at sætte $.mobile.orientationChangeEnabled = false; og se, om resize eventet virker som en fallback.

Q4: Kan jeg bruge orientationchange til at ændre min app's layout fuldstændigt?

A4: Ja, absolut. Ved at tilføje eller fjerne CSS-klasser til `body` eller andre elementer baseret på den detekterede orientering, kan du styre alt fra skriftstørrelser, elementplaceringer til synligheden af bestemte komponenter for at optimere brugeroplevelsen i både portræt- og landskabstilstand.

Konklusion

jQuery Mobiles orientationchange event er et kraftfuldt værktøj for enhver udvikler, der ønsker at skabe dynamiske og responsive webapplikationer til mobile enheder. Ved at tilbyde en simpel og robust måde at detektere og reagere på ændringer i enhedens orientering, hjælper det med at sikre, at brugerne får den bedst mulige oplevelse, uanset hvordan de holder deres enhed. Selvom der er visse nuancer omkring dets status i webstandarder, forbliver det en værdifuld funktion i jQuery Mobiles arsenal til at håndtere de unikke udfordringer ved mobil webudvikling.

Hvis du vil læse andre artikler, der ligner jQuery Mobile: Styr enhedens orientering, kan du besøge kategorien Mobil.

Go up