javascript通过多个条件循环
我试图做一个循环,执行代码,观察手机alpha,然后转到特定页面,但我的循环只适用于我的第一个和第二个case if,以及第一个else ifjavascript通过多个条件循环,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
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吗?