javascript循环遍历多个条件

时间:2017-06-21 23:00:52

标签: javascript

我正在尝试执行一个循环来执行代码并观察手机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);
        }
}

1 个答案:

答案 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.无论如何,这是一个非常罕见的情况,并没有引起太多麻烦。