Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript通过多个条件循环_Javascript - Fatal编程技术网

javascript通过多个条件循环

javascript通过多个条件循环,javascript,Javascript,我试图做一个循环,执行代码,观察手机alpha,然后转到特定页面,但我的循环只适用于我的第一个和第二个case if,以及第一个else if window.addEventListener("deviceorientation",findPlace); for (var i = 0; i < count; i++) { findPlace(); } function findPlace(evt) { if (evt.alpha < 90 || evt.a

我试图做一个循环,执行代码,观察手机alpha,然后转到特定页面,但我的循环只适用于我的第一个和第二个case if,以及第一个else if

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);
        }
}
window.addEventListener(“deviceorientation”,findPlace);
对于(变量i=0;i360){
unit.goToScreenAction(ctx,{screen:unit.find('Norte')},noop);
window.alpha=evt.alpha;
unit.find('alphatxt').setText(window.alpha+'');
} 
否则如果(evt.alpha<180 | | evt.alpha>90){
goToScreenAction(ctx,{screen:unit.find('Este')},noop);
window.alpha=evt.alpha;
unit.find('alphatxt3').setText(window.alpha+'');
}
否则如果(evt.alpha<360 | | evt.alpha>270){
goToScreenAction(ctx,{screen:unit.find('Sur')},noop);
window.alpha=evt.alpha;
unit.find('alphatxt1').setText(window.alpha+'');
} 
否则如果(evt.alpha<270 | | evt.alpha>180){
unit.goToScreenAction(ctx,{screen:unit.find('Oeste')},noop);
window.alpha=evt.alpha;
unit.find('alphatxt2').setText(window.alpha+'');
}  
否则{
unit.goToScreenAction(ctx,{screen:unit.find('Nada')},noop);
}
}

您正在混合同步和异步代码

当您附加
deviceorientation
事件处理程序时,它是同步的。之后立即同步执行
for
循环

当触发
deviceorientation
事件时,将异步调用
findPlace
函数。换句话说,您的脚本不会进行调用。浏览器可以

问题是,您也在为循环同步调用
findPlace
。并且您的
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);
  }
}
window.addEventListener(“deviceorientation”,findPlace);
函数findPlace(evt){
如果(evt.alpha>=0&&evt.alpha<90){
...
}
否则如果(evt.alpha>=90&&evt.alpha<180){
...
}
否则如果(evt.alpha>=180&&evt.alpha<270){
...
}
否则如果(evt.alpha>=270&&evt.alpha<360){
...
}
否则{
unit.goToScreenAction(ctx,{screen:unit.find('Nada')},noop);
}
}

不确定
alpha
是否正好为360。规范说这可能发生,但它相当于0。无论如何,这种情况非常罕见,不会造成太多麻烦。

您能否进一步澄清您希望每个特定if/else if语句测试的内容?我觉得你的一些
|
应该是
&
findPlace()
需要一个
evt
参数,但是你没有在循环中传递任何参数。@J.Chen我很确定它们都应该是
&
。你在使用
你好,如果其他的话,如果stament要测试设备定向中的alpha,例如,如果度数是88,它应该去Norte,等等,但在我的测试中,它只对北TE起作用,然后它进行评估,然后去南方,其他什么都没有。。。“娜达”只有在没有学位的时候才会出现。下面是我的一个开发示例,我现在正试图弄清楚为什么android在开始时有不同的alpha:“警告:Chrome和Firefox处理角度的方式不同,所以在某些轴上方向是相反的。”我猜你可以用“android”代替“Chrome”。你一开始是在测试Firefox吗?