Как адаптировать компас для работы на Android? - PullRequest
0 голосов
/ 20 декабря 2018

Я все еще довольно новичок в Javascript и довольно незнаком с Android в целом.Мне было интересно, если кто-то хочет посмотреть на мой код и сказать мне, что я делаю неправильно.

Я использовал веб-комплект, чтобы сделать этот компас, который прекрасно работает на iPhone, но он не работаетдля Android.Он преобразует альфа-значение ориентации устройства в переменную, называемую заголовком, и первоначально выглядело так:

// Get event data
function deviceOrientationListener(event) {
  var alpha    = event.alpha; //z axis rotation [0,360)
  var beta     = event.beta; //x axis rotation [-180, 180]
  var gamma    = event.gamma; //y axis rotation [-90, 90]
  //Check if absolute values have been sent
  if (typeof event.webkitCompassHeading !== "undefined") {
    alpha = event.webkitCompassHeading; //iOS non-standard
    var heading = alpha
    document.getElementById("heading").innerHTML = heading.toFixed([0]);
  }
  else {
    alert("This compass won't work on your device!  :(");
    var heading = 360 - alpha; //heading [0, 360)
    document.getElementById("heading").innerHTML = heading.toFixed([0]);
  }

Оттуда я добавил оператор else if, чтобы попытаться заставить его работать на Android.Оповещение о том, что компас не работает, действительно исчезает, поэтому я думаю, что условие для else если выполняется, но, похоже, существует проблема с преобразованием градусов вращения альфа в переменную, потому что ничего не отображается.

Новый код выглядит следующим образом:

// Get event data
function deviceOrientationListener(event) {
  var alpha    = event.alpha; //z axis rotation [0,360)
  var beta     = event.beta; //x axis rotation [-180, 180]
  var gamma    = event.gamma; //y axis rotation [-90, 90]
  //Check if absolute values have been sent
  if (typeof event.webkitCompassHeading !== "undefined") {
    alpha = event.webkitCompassHeading; //iOS non-standard
    var heading = alpha
    document.getElementById("heading").innerHTML = heading.toFixed([0]);
  }
  else if (window.DeviceOrientationEvent) {
    window.addEventListener('deviceorientation', deviceOrientationHandler, false);
    alpha = DeviceOrientationEvent.alpha; 
    var heading = alpha
    document.getElementById("heading").innerText = heading.toFixed([0]);
  }
  else {
    alert("This compass won't work on your device!  :(");
    var heading = 360 - alpha; //heading [0, 360)
    document.getElementById("heading").innerHTML = heading.toFixed([0]);
  }

Я довольно новичок в Javascript, поэтому, пожалуйста, будьте любезны!Просто хочу знать, что я делаю не так. Заранее спасибо.

РЕДАКТИРОВАТЬ: Вот ссылка на то, что у меня сейчас

...