我正在尝试在 Javascript/JQuery 中创建一个可靠的指南针(使用 deviceorientation),以便它可以在 iOS 和 Android 移动设备上运行。我知道 Stackoverflow 中关于这个主题的几乎所有(非常古老的)问题/答案。我创建了一个非常简单的指南针,它在 iOS 设备上运行良好。在 Android 设备(Galaxy S8)上,我有一个奇怪的行为:就像我每天都在测试它,指南针方向北切换到 -45/+45、90(北在东)、180(北在南)的偏移量) 或 270 度(北在西)。是的,我考虑过指南针校准(8 位数移动,在测试前将手机围绕它的 3 个轴转动)。
这是指南针的 Javascript 代码:
if (isIos()) // // Function in the background evaluating OS
{
window.addEventListener('deviceorientation', function(event) {
var alpha;
// Use Webkit heading for iOS
alpha = event.webkitCompassHeading;
if (alpha < 0) { alpha += 360; }
if (alpha > 360) { alpha -= 360; }
// Calculated heading
console.log (alpha);
});
}
else {
// Any other device, with Chrome browser
if ('ondeviceorientationabsolute' in window) {
// Chrome 50+ specific
window.addEventListener('deviceorientationabsolute', function (event) {
var alpha = 360 - event.alpha;
if (alpha < 0) { alpha += 360; }
if (alpha > 360) { alpha -= 360; }
// Calculated heading
console.log (alpha);
});
}
else {
window.addEventListener('deviceorientation', function (event) {
var alpha = 180 - event.alpha;
if (alpha < 0) {
alpha += 360;
}
if (alpha > 360) {
alpha -= 360;
}
// Calculated heading
console.log (alpha);
});
}
}
简而言之:
- iOS(iPhone、iPad):使用 event.webkitCompassHeading -> 工作正常
- Chrome:使用 ondeviceorientationabsolute -> 导致描述的偏差问题
- 否则:考虑 alpha 的设备方向 -> 导致描述的偏差问题
我知道我还必须考虑 beta 和 gamma 轴。对于我的测试,我将手机放在桌子上,所以只有 alpha 是相关的。
通过我的研究,我发现Stackoverflow (fulltilt-min.js) 中提到了一个非常先进/完整的 javascript 指南针,考虑到所有 3 个轴。这是它的演示。甚至这个指南针也向我显示了与我的指南针完全相同的错误航向。
那么任何人都可以在 Android 手机上解释这种行为或知道如何解决这个问题吗?