我正在尝试执行一个循环来执行代码并观察手机alpha然后转到特定页面,但我的循环它只适用于我的第一个和第二个案例,如果,首先是否。
window.addEventListener("deviceorientation",findPlace);
for (var i = 0; i < count; i++) {
findPlace();
}
function findPlace(evt) {
if (evt.alpha < 90 || evt.alpha > 360) {
unit.goToScreenAction(ctx, { screen: unit.find('Norte') }, noop);
window.alpha = evt.alpha;
unit.find('alphatxt').setText(window.alpha + '');
}
else if (evt.alpha < 180 || evt.alpha > 90) {
unit.goToScreenAction(ctx, { screen: unit.find('Este') }, noop);
window.alpha = evt.alpha;
unit.find('alphatxt3').setText(window.alpha + '');
}
else if (evt.alpha < 360 || evt.alpha > 270) {
unit.goToScreenAction(ctx, { screen: unit.find('Sur') }, noop);
window.alpha = evt.alpha;
unit.find('alphatxt1').setText(window.alpha + '');
}
else if (evt.alpha < 270 || evt.alpha > 180) {
unit.goToScreenAction(ctx, { screen: unit.find('Oeste') }, noop);
window.alpha = evt.alpha;
unit.find('alphatxt2').setText(window.alpha + '');
}
else {
unit.goToScreenAction(ctx, { screen: unit.find('Nada') }, noop);
}
}
答案 0 :(得分:-1)
你正在混合同步和异步代码。
当您附加deviceorientation
事件处理程序时,它是同步的。 for
循环在之后同步执行。
当触发deviceorientation
事件时,将异步调用findPlace
函数。换句话说,您的脚本不会拨打电话。浏览器确实。
问题是,您还在findPlace
循环中同步调用for
。而且您的count
变量未定义。
您可能会感到困惑,因为有时在其他语言(如Java或C ++)中基于事件的框架中使用了“事件循环”这一术语。使用JavaScript,事件循环由浏览器处理。你不必关心它。只需注册事件处理程序,您的代码就是rollin'。
现在注意其他评论,你需要解决findPlace
函数中的逻辑问题。
编辑以获得更完整的答案,以下是if/else
结构的外观:
window.addEventListener("deviceorientation",findPlace);
function findPlace(evt) {
if (evt.alpha >= 0 && evt.alpha < 90) {
...
}
else if (evt.alpha >= 90 && evt.alpha < 180) {
...
}
else if (evt.alpha >= 180 && evt.alpha < 270) {
...
}
else if (evt.alpha >= 270 && evt.alpha < 360) {
...
}
else {
unit.goToScreenAction(ctx, { screen: unit.find('Nada') }, noop);
}
}
不确定alpha
完全 360的情况.Spec表示它可能会发生,但相当于0.无论如何,这是一个非常罕见的情况,并没有引起太多麻烦。