Kann ich Javascript plattformübergreifend verwenden, um den Kompass in iOS und Android (mit Chrome) zu finden, ohne etwas wie PhoneGap zu verwenden? Ich weiß, iOS hat DeviceOrientationEvent, aber ich kann keine Entsprechung für Chrome für Android finden.Kann ich Javascript verwenden, um den Kompass für iOS und Android zu erhalten?
Antwort
Ja können Sie! Leider funktioniert die alpha
nicht auf iPhones/iPads. Bei Mobile Safari basiert alpha
auf der Richtung, in die das Gerät bei der ersten Geräteausrichtung zeigte. Das mitgelieferte Webkit bietet Ihnen die Kompassrichtung. Um es für alle anderen Browsern (die alle Träger alpha
als compassheading
) können Sie den folgenden JavaScript-Code verwenden können:
if (window.DeviceOrientationEvent) {
// Listen for the deviceorientation event and handle the raw data
window.addEventListener('deviceorientation', function(eventData) {
var compassdir;
if(event.webkitCompassHeading) {
// Apple works only with this, alpha doesn't work
compassdir = event.webkitCompassHeading;
}
else compassdir = event.alpha;
});
}
Android auch Webkit unterstützt, so wäre auch verwenden event.webkitCompassHeading, aber das ist OK.
BTW: "oncompassneedscalibration
" wird auch nicht für iPhones und iPads unterstützt.
'' event.alpha'' ist nicht genug, um eine Kompassrichtung zu bekommen, '' alpha'' ist nur die z-Rotation eines Gerätes um seine eigene Achse (siehe http://w3c.github.io/deviceorientation/spec-our-orientation.html#rotations). Es ist jedoch möglich, Alpha, Beta und Gamma in eine Kompassrichtung zu übersetzen; Siehe die Antwort von @richt unten. – davidjb
@davidjb: Ihre Antwort könnte Leser ohne gegebene Erklärungen verwirren und bezieht sich zB auch auf den Alphakanal. Hier ist ein visuelles Beispiel, das zeigt, dass der Alphakanal mit der horizontalen Ausrichtung aus der Halteransicht in Beziehung steht: https://dev.opera.com/articles/w3c-device-orientation-api/ Was Sie wahrscheinlich sagen wollten: Im Fall von Wenn Sie nur den Alphakanal für die Kompassrichtung verwenden, müssen Sie das Telefon horizontal und im Hochformat für eine ordnungsgemäße Verwendung halten. Sonst könnte das Telefon seine Ausrichtung verlieren und keine richtige Richtung anzeigen. – Jonny
Ich glaube, Sie das Objekt „Überschrift“ Feld der Lage zu verwenden, von navigator.geolocation finden Sie hier:
https://developer.mozilla.org/en-US/docs/WebAPI/Using_geolocation
Ich kenne keinen anderen Weg.
Hoffe, dass es hilft, A.
-1. Geolocation gibt Ihnen keine Kompassdaten. Dies ist keine echte Antwort. – Mohsen
Als Primer Sie this previous related StackOverflow answer und vertraut sein mit der allgemeinen practical considerations for using DeviceOrientation Events in Webanwendungen überprüfen soll.
Die einfache Lösung, die ich in my previous related StackOverflow answer gelten nur für Browser, die absolute
deviceOrientation Ereignisse (d-Browser, wo die deviceOrientation alpha
Eigenschaft ist Kompass -orientierten) implementieren. Das bedeutet, dass die dort angebotene Lösung derzeit nur in Android-Browsern und nicht in iOS-basierten Browsern oder anderen Browsern funktioniert, die keine absolute
-basierten Geräteorientierungs-Ereignisdaten bereitstellen.
Um zuverlässig den aktuellen Kompasskurs über Android und iOS-Browser Sie müssen heute erhalten beide absolute
und nicht absolute
Implementierungen behandeln, die die zusätzliche webkitCompassHeading
Eigenschaft bieten und stellen Sie sicher, dass für alle aktuelle Bildschirmausrichtung Änderungen Rechnung zu tragen als Teil . AFAIK die einzige Bibliothek, die dies derzeit tut, ist Full Tilt JS (Disclaimer: Ich bin der Autor dieser Bibliothek).
Der folgende Code wird Ihnen die gleiche richtige Kompass gibt in allen Browsern sowohl iOS und Android Überschrift, unter Berücksichtigung der Unterschiede in Geräteausrichtung Implementierungen zu nehmen und all notwendige Runtime-Bildschirmausrichtung Anwendung transformiert zu:
<!-- Include the Full Tilt JS library from https://github.com/richtr/Full-Tilt-JS -->
<script src="fulltilt-min.js"></script>
<script>
// Obtain a new *world-oriented* Full Tilt JS DeviceOrientation Promise
var promise = FULLTILT.getDeviceOrientation({ 'type': 'world' });
// Wait for Promise result
promise.then(function(deviceOrientation) { // Device Orientation Events are supported
// Register a callback to run every time a new
// deviceorientation event is fired by the browser.
deviceOrientation.listen(function() {
// Get the current *screen-adjusted* device orientation angles
var currentOrientation = deviceOrientation.getScreenAdjustedEuler();
// Calculate the current compass heading that the user is 'looking at' (in degrees)
var compassHeading = 360 - currentOrientation.alpha;
// Do something with `compassHeading` here...
});
}).catch(function(errorMessage) { // Device Orientation Events are not supported
console.log(errorMessage);
// Implement some fallback controls here...
});
</script>
Hier a demo, die diese Technik zeigt, um die Kompassrichtung zu erhalten, auf die der Benutzer blickt. Es sollte sowohl auf iOS- als auch auf Android-Browsern funktionieren.
Die Implementierung des Codes in dieser Demo ist wie oben gezeigt und kann auf Github unter ./scripts/compass.js:L268-L272 angesehen werden.
Hallo Richt, ich habe deine Bibliothek getestet, funktioniert einwandfrei, aber ich denke es gibt mir nicht den richtigen Norden oder? – Miguel
keines dieser Beispiele geben den Norden auf Android. Das ist ein totaler Witz. –
@richt nach dem Erhalten der Geräteausrichtung, wie würde ich es verwenden, um den Kompass-Kurs (Richtung Geo Punkt B) zu bekommen? Ich kann Peilung (Grad) von 2 Geo-Punkten (Punkt A und Punkt B) erfolgreich berechnen. – jasan
On Chrome für Android können Sie 'deviceorientationabsolute'
Ereignis-Listener verwenden:
if ('ondeviceorientationabsolute' in window) {
// Chrome 50+ specific
window.addEventListener('deviceorientationabsolute', handleOrientation);
} else if ('ondeviceorientation' in window) {
window.addEventListener('deviceorientation', handleOrientation);
}
function handleOrientation(event) {
var alpha;
if (event.absolute) {
alpha = event.alpha;
} else if (event.hasOwnProperty('webkitCompassHeading')) {
// get absolute orientation for Safari/iOS
alpha = 360 - event.webkitCompassHeading; // conversion taken from a comment on Google Documentation, not tested
} else {
console.log('Could not retrieve absolute orientation');
}
console.log('Absolute orientation: ' + alpha);
}
Siehe this article an Dokumentation für Entwickler Google Web.
Getestet auf Chrome 63 für Android.
- 1. Sass, Kompass und JavaScript
- 2. Welche Datenbank für iOS und Android verwenden
- 3. Kann ich OverlappingInstances verwenden, um bessere Fehlermeldungen zu erhalten?
- 4. Kompass in Android
- 5. Wie kann ich den iOS-Simulator verwenden, um den Speicherplatz zu simulieren?
- 6. JavaScript, um Texteingabewert zu erhalten
- 7. Wie bekomme ich Android Kompass lesen?
- 8. Kann den Kompass nach der Installation nicht verwenden
- 9. Kann ich CURL verwenden, um HTTP/2-Header zu erhalten?
- 10. Kann ich JavaScript verwenden, um das 'name' Attribut zu setzen?
- 11. Android OpenGL Kompass
- 12. Wie kann ich SqlConnection.GetSchema verwenden, um Synonyminformationen zu erhalten?
- 13. Wie kann ich XPath verwenden, um Elemente zu erhalten?
- 14. Code für Android, der einen Kompass verwenden würde, um auf einen bestimmten Longatude und Latatude zu zeigen?
- 15. Wie kann ich JavaScript verwenden, um diese Gleichung zu lösen?
- 16. Kann ich Javascript verwenden, um die Sprache zu ändern?
- 17. Kann ich C++ Vorlage in iOS verwenden?
- 18. Qibla Kompass in Android
- 19. Wie kann ich den Ergebniswert in einer Unterabfrage erhalten und für den Vergleich mit MySQL verwenden?
- 20. Wie kann ich mechanize verwenden, um auf eine Webseite zu klicken, um Informationen zu erhalten?
- 21. Verwenden von Reflektion, um den Namen eines Parameters zu erhalten
- 22. Javascript, um System Doppelklickintervall zu erhalten?
- 23. Mobilgeräteindeutigkeit für iOS und Android
- 24. Kann ich pywikipedia verwenden, um nur den Text einer Seite zu erhalten?
- 25. So verwenden Sie Ajax, um dynamisch den Busplan zu erhalten
- 26. Verwenden Sie event.target, um den Klassenwert zu erhalten?
- 27. Verwenden Sie JDT, um den vollständigen Methodennamen zu erhalten
- 28. Audioformat für iOS und Android
- 29. Javascript firefox Erweiterung, um den Text um den Link zu erhalten
- 30. Verwenden von dplyr, um Zählungen zu erhalten
Es gibt eine [Web Compass API] (http://dev.w3.org/2009/dap/system-info/compass.html). Ich kenne die Browser-Unterstützung nicht, aber Sie können versuchen, auf 'getCurrentOrientation' im globalen Bereich zuzugreifen und zu sehen, ob es da ist. Sie können es auch mit dem Präfix "webkit" versuchen. Viel Glück! – Mohsen