Er komen wijzigingen in de apparaatoriëntatie naar Chrome 50

Ontwikkelaars die aan virtuele of augmented reality-webapps werken, zijn ongetwijfeld bekend met DeviceOrientationEvent . Voor niet-ingewijden biedt ' This End Up: Device Orientation ' een goed overzicht van hoe een deviceorientation gebeurtenislist kan reageren op het draaien en draaien van een apparaat.

In eerdere versies van Chrome werden de alpha , beta en gamma waarden in DeviceOrientationEvent weergegeven als absolute graden ten opzichte van het coördinatenframe van de aarde. Voor het weergeven van absolute graden is het gebruik van de magnetometersensor van een apparaat nodig om het magnetische veld van de aarde te detecteren, en dat is op zijn beurt gevoelig voor fluctuaties in het nabijgelegen magnetische veld die de metingen kunnen verstoren. In de praktijk zou dit ertoe kunnen leiden dat een webapp een aantal DeviceOrientationEvent 's registreert vanwege een nabijgelegen magneet, ondanks dat het apparaat zelf niet echt beweegt. Voor een virtual reality-toepassing die zich alleen bekommert om het volgen van oriëntatieveranderingen, is deze magnetische ruis slecht nieuws.

Wat verandert er?

Vanaf Chrome 50 zijn de graden in DeviceOrientationEvent standaard niet langer absoluut ten opzichte van het coördinatenframe van de aarde. Dit betekent dat DeviceOrientationEvent s alleen mag worden geactiveerd als er daadwerkelijk beweging is, zoals gedetecteerd door een combinatie van de versnellingsmeter en de gyroscoop van een apparaat. De magnetometer en valse metingen als gevolg van fluctuaties in het magnetische veld zijn buiten beeld.

Maar ik heb nog steeds absolute graden nodig!

Als je JavaScript schrijft dat absolute graden moet gebruiken, misschien als onderdeel van een augmented reality-webapplicatie die rechtstreeks moet worden gekoppeld aan de fysieke wereld, heb je geen pech. Het eerdere gedrag, afhankelijk van de magnetometer van een apparaat, is beschikbaar via een nieuwe deviceorientationabsolute gebeurtenis . Vanuit het perspectief van een ontwikkelaar is het analoog aan de bestaande DeviceOrientationEvent , met de garantie dat de absolute eigenschap op true wordt ingesteld.

Detecteren wat wordt ondersteund

Ontwikkelaars die de voorkeur geven aan absolute graden, kunnen functiedetectie gebruiken om te bepalen of ze een browser gebruiken die de nieuwe DeviceOrientationAbsoluteEvent gebeurtenis ondersteunt:

if ('ondeviceorientationabsolute' in window) {
    // We can listen for the new deviceorientationabsolute event.
} else if ('ondeviceorientation' in window) {
    // We can still listen for deviceorientation events.
    // The `absolute` property of the event tells us whether
    // or not the degrees are absolute.
}

Compatibiliteit tussen browsers

De waarden die worden gerapporteerd in DeviceOrientationEvent zijn nooit consistent geweest.

Safari en Firefox op iOS gebruiken relatieve waarden voor de graden, wat overeenkomt met de implementatiewijziging die in Chrome 50 is geïntroduceerd. De wijziging moet leiden tot meer consistentie met webapplicaties die met iOS in gedachten zijn geschreven.

Firefox (op andere platforms dan iOS), Edge- en Chrome-versies ouder dan 50 gebruiken absolute gradenwaarden voor de DeviceOrientationEvent wanneer deze worden uitgevoerd op apparaten met de juiste sensoren.

Op het moment van schrijven is Chrome 50 de eerste browser die de nieuwe DeviceOrientationAbsoluteEvent ondersteunt.

Geavanceerde oriëntatietracking met DeviceMotionEvent

Boris Smus heeft een fantastisch gedetailleerd artikel waarin enkele nadelen van het gebruik van DeviceOrientationEvent worden beschreven, en hoe een op maat gemaakte sensorfusie kan worden geïmplementeerd met behulp van DeviceMotionEvent s. Ze bieden toegang op laag niveau tot de versnellingsmeter en gyroscoop, en kunnen leiden tot een nauwkeurigere virtual reality-ervaring voor uw gebruikers.

Aanvullende bronnen