Posso usare Javascript in modo multipiattaforma per ottenere la direzione della bussola in iOS e Android (con Chrome), senza utilizzare qualcosa come PhoneGap? So che iOS ha DeviceOrientationEvent, ma non riesco a trovare alcun equivalente su Chrome per Android.Posso usare Javascript per ottenere la direzione della bussola per iOS e Android?
risposta
Sì, è possibile! Sfortunatamente il alpha
non funziona su iPhone/iPad. Con Mobile Safari, alpha
si basa sulla direzione in cui il dispositivo puntava quando è stato richiesto per la prima volta l'orientamento del dispositivo. Il kit web incluso ti offre la direzione della bussola. Per farlo funzionare per tutti gli altri browser (che tutti i supporti alpha
come compassheading
) è possibile utilizzare il seguente codice JavaScript:
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 supporta anche Webkit, così sarebbe anche usare event.webkitCompassHeading, ma va bene.
BTW: "oncompassneedscalibration
" non è supportato anche per iPhone e iPad.
'' event.alpha'' non è sufficiente per ottenere un'intestazione bussola, '' alpha'' è solo la rotazione z di un dispositivo sul proprio asse (vedi http://w3c.github.io/deviceorientation/spec-source-orientation.html#rotations). Tuttavia, è possibile tradurre alpha, beta e gamma in una bussola; vedere la risposta di @richt qui sotto. – davidjb
@davidjb: la tua risposta potrebbe confondere i lettori senza alcuna spiegazione e l'esempio di richt è anche relativo al canale alfa. Ecco un esempio visivo che mostra che il canale alfa è correlato all'orientamento orizzontale dalla vista titolare: https://dev.opera.com/articles/w3c-device-orientation-api/ Ciò che probabilmente volevi dire: In caso di utilizzando solo il canale alfa per la direzione della bussola è necessario tenere il telefono in orizzontale e in modalità verticale per un uso corretto. Altrimenti il telefono potrebbe perdere il suo orientamento e non mostrare la direzione corretta. – Jonny
io credo che si possa utilizzare il campo "voce" dell'oggetto posizione, da navigator.geolocation, vedere qui:
https://developer.mozilla.org/en-US/docs/WebAPI/Using_geolocation
non conosco altro modo.
Speranza che aiuta, A.
-1. La geolocalizzazione non ti dà i dati della bussola. Questa non è una vera risposta. – Mohsen
Come primer si dovrebbe rivedere this previous related StackOverflow answer e avere familiarità con il generale practical considerations for using DeviceOrientation Events nelle applicazioni web.
La soluzione semplice che ho fornito in my previous related StackOverflow answer applica solamente ai browser che implementano absolute
eventi deviceorientation (cioè dove il browser deviceorientation alpha
proprietà è bussola -oriented). Ciò significa che la soluzione fornita al momento funziona solo nei browser Android e non nei browser basati su iOS o in qualsiasi altro browser che non fornisce dati relativi all'orientamento della periferica basati su absolute
.
Per ottenere in modo affidabile l'attuale direzione della bussola attraverso sia Android e iOS browser oggi è necessario gestire entrambi i absolute
e non absolute
implementazioni che forniscono l'ulteriore webkitCompassHeading
proprietà e fare in modo di tenere conto di eventuali modifiche orientamento attuale dello schermo come parte di tale . AFAIK l'unica libreria che attualmente lo fa è Full Tilt JS (disclaimer: sono l'autore di questa libreria).
Il seguente codice vi darà la stessa corretta bussola di attraversare sia per iOS e browser Android, tenendo conto delle differenze in un dispositivo di implementazioni di orientamento e applica ogni orientamento dello schermo runtime necessari trasforma troppo:
<!-- 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>
Ecco a demo che dimostra questa tecnica per ottenere la direzione della bussola che l'utente sta affrontando. Dovrebbe funzionare bene su entrambi i browser iOS e Android.
L'implementazione del codice in quella demo è come mostrato sopra e può essere visualizzata su Github allo ./scripts/compass.js:L268-L272.
ciao Richt, ho testato la tua libreria, funziona perfettamente, ma penso che non mi dia il vero Nord giusto? – Miguel
nessuno di questi esempi dà il nord su Android. questo è uno scherzo totale. –
@richt dopo aver ottenuto l'orientamento del dispositivo, come utilizzarlo per ottenere la direzione della bussola (direzione verso il punto B geografico)? Posso calcolare con successo il rilevamento (gradi) da 2 punti geografici (punto A e punto B). – jasan
Su Chrome per Android, è possibile utilizzare 'deviceorientationabsolute'
listener di eventi:
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);
}
Vedi this article a Google Web Developer Documentation.
Testato su Chrome 63 per Android.
- 1. Come ottenere la direzione della bussola da azimut su Android
- 2. Posso usare Lazzaro Pascal per costruire per iOS e Android
- 3. Come leggere la bussola Android?
- 4. Simulatore iOS e XCode per simulare la bussola?
- 5. Tra il GPS, la direzione della bussola e l'accelerometro, che consuma la maggior parte della batteria?
- 6. Come mostrare la direzione del vento su una bussola
- 7. iPhone iOS mostra la direzione e l'orientamento dell'utente nello spazio come l'app bussola su MKMapView
- 8. Sensore direzione Android
- 9. android come posso usare la classe ObjectAnimator per Android 2.2
- 10. Posso usare JavaScript per impostare l'attributo 'nome'?
- 11. La direzione della bussola è diversa a seconda dell'orientamento del telefono
- 12. Posso ottenere la precisione della posizione GPS in iOS?
- 13. Ottenere il vettore direzione in Android
- 14. Il pulsante di direzione Posizione corrente/Bussola è disponibile nell'SDK di iOS?
- 15. La bussola dell'iPhone presenta l'angolo di inclinazione della direzione errato è> 45 ° circa
- 16. Ottieni direzione (bussola) con due punti di latitudine/longitudine
- 17. Rileva la direzione della selezione utente con javascript
- 18. Android bussola di rilevamento
- 19. Come posso ottenere la direzione su un'applicazione iPhone iOS 6 in Xcode da A a B?
- 20. Sintassi ellissi della bussola
- 21. Twitter Bootstrap carousel: ottenere la direzione della diapositiva
- 22. Come configurare Ruby per usare la bussola per Sench-touch su Windows
- 23. Usare caja per disinfettare Javascript?
- 24. Scelta del backend per Android e IOS?
- 25. Come ottenere la direzione del testo in Android e modificare il layout in modo dinamico in base alla direzione?
- 26. Ottenere Theano per usare la GPU
- 27. javascript per ottenere l'url della pagina precedente
- 28. Un modo per usare la codifica Scala per iOS?
- 29. UISplitViewController iOS 5.1 causa errore di direzione della freccia popover
- 30. Come realizzare una bussola accurata su Android
C'è una [API Web Compass] (http://dev.w3.org/2009/dap/system-info/compass.html). Non conosco il supporto del browser, ma puoi provare ad accedere a 'getCurrentOrientation' in ambito globale e vedere se è lì. Potresti anche provare con il prefisso 'webkit'. In bocca al lupo! – Mohsen