Jak získat přístup k datům akcelerometr / gyroskop z Javascript?

hlasů
117

Nedávno jsem narazil na několik internetových stránek, které se zdá přístup akcelerometr nebo gyroskop na mém notebooku, detekcí změn orientace a pohybu.

Jak se to dělá? Musím přihlásit do nějaké události na windowobjekt?

Na kterém zařízení (notebooky, mobilní telefony, tablety), je to známo, že funguje?


NB : Já vlastně už víte (část), že odpověď na tuto otázku, a budu psát to hned. Důvodem, že jsem vysílání na otázku, zde je, aby všichni věděli, že akcelerometr údaje jsou k dispozici v JavaScriptu (u některých přístrojů) a napadnout komunitu zveřejnit nové poznatky na toto téma. V současné době se zdá, že téměř žádná dokumentace z těchto funkcí.

Položena 07/12/2010 v 16:37
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
167

Současné době existují tři odlišné události, které mohou nebo nemusí být uplatněna, pokud klientská zařízení pohybuje. Dva z nich jsou zaměřeny na orientaci a poslední v pohybu :

  • ondeviceorientationJe známo, že pracují na verzi prohlížeče Chrome, a většina notebooků Apple Zdá se, že hardware potřebný pro tuto práci. Funguje to i pro mobilní Safari na iPhone 4 s iOS 4.2. Ve funkci zpracování událostí, můžete přistupovat alpha, beta, gammahodnoty na datech události dodávaných jako jediný argument funkce.

  • onmozorientationje podporován na Firefox 3.6 a novější. Opět platí, že to je známo, že práce na většině notebooků Apple, ale mohl pracovat na Windows nebo Linux strojích s akcelerometrem stejně. Ve funkci zpracování událostí, podívejte se x, y, zpole na dat událostí dodávány jako první argument.

  • ondevicemotionje známo, že pracuje na iPhone 3GS + 4 a iPad (oba s iOS 4.2), a poskytuje data týkající se aktuální zrychlení zařízení klienta. Údaj události předaný funkci psovod accelerationi accelerationIncludingGravity, které oba mají tři pole pro každou osu: x, y,z

Dále jen „zemětřesení detekci“ web vzorek používá řadu ifvýkazů zjistit, která událost se připojit k (v poněkud prioritní pořadí) a předá údaje získané na společnou tiltfunkci:

if (window.DeviceOrientationEvent) {
    window.addEventListener("deviceorientation", function () {
        tilt([event.beta, event.gamma]);
    }, true);
} else if (window.DeviceMotionEvent) {
    window.addEventListener('devicemotion', function () {
        tilt([event.acceleration.x * 2, event.acceleration.y * 2]);
    }, true);
} else {
    window.addEventListener("MozOrientation", function () {
        tilt([orientation.x * 50, orientation.y * 50]);
    }, true);
}

Konstantní faktory 2 a 50 se používají k „zarovnání“ se naměřené hodnoty ze dvou posledně uvedených událostí s údaji z první, ale jsou v žádném případě přesné reprezentace. Pro tento jednoduchý projekt „hraček“ to funguje v pohodě, ale pokud budete muset použít data pro něco mírně vážnější, budete muset seznámit se s jednotkami hodnot stanovených v různých akcích a zacházet s nimi s respektem :)

Odpovězeno 07/12/2010 v 16:38
zdroj uživatelem

hlasů
17

Nelze-li přidat komentář k výborné vysvětlení v druhém příspěvku ale chtěl zmínit, že velkým zdrojem dokumentace lze nalézt zde .

To je dost zaregistrovat funkci událostí pro akcelerometru jako tak:

if(window.DeviceMotionEvent){
  window.addEventListener("devicemotion", motion, false);
}else{
  console.log("DeviceMotionEvent is not supported");
}

s psovodem:

function motion(event){
  console.log("Accelerometer: "
    + event.accelerationIncludingGravity.x + ", "
    + event.accelerationIncludingGravity.y + ", "
    + event.accelerationIncludingGravity.z
  );
}

A magnetometr vyplývajícími z rutiny události musí být registrováno:

if(window.DeviceOrientationEvent){
  window.addEventListener("deviceorientation", orientation, false);
}else{
  console.log("DeviceOrientationEvent is not supported");
}

s psovodem:

function orientation(event){
  console.log("Magnetometer: "
    + event.alpha + ", "
    + event.beta + ", "
    + event.gamma
  );
}

K dispozici jsou také položky uvedené v případě pohybu na gyroskopu, ale to se nezdá být všeobecně podporován (např to nefungovalo na Samsung Galaxy Note).

K dispozici je jednoduchý pracovní kód na GitHub

Odpovězeno 06/10/2014 v 14:10
zdroj uživatelem

hlasů
1

Naše záložních zde: https://developer.mozilla.org/en-US/docs/Web/Events/MozOrientation

function orientationhandler(evt){


  // For FF3.6+
  if (!evt.gamma && !evt.beta) {
    evt.gamma = -(evt.x * (180 / Math.PI));
    evt.beta = -(evt.y * (180 / Math.PI));
  }

  // use evt.gamma, evt.beta, and evt.alpha 
  // according to dev.w3.org/geo/api/spec-source-orientation


}

window.addEventListener('deviceorientation',  orientationhandler, false);
window.addEventListener('MozOrientation',     orientationhandler, false);
Odpovězeno 02/03/2016 v 11:46
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more