2017-06-21 46 views
1

即時通訊嘗試做一個循環,執行代碼並觀察手機alpha,然後轉到特定頁面,但我的循環只能處理我的第一個和第二個case if和frist else if。 .. 即時有點失去,我不知道還有什麼其他的事情...會喜歡一些幫助thx很多!JavaScript循環槽多個條件

 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); 
     } 
} 
+6

你能澄清一下你想要每個特定的if/else-if語句來測試嗎?我有一種感覺,你的一些'||'應該是'&&'。 –

+1

'findPlace()'需要一個'evt'參數,但是你沒有在循環中傳遞任何參數。 – Barmar

+0

@ J.Chen我很確定*他們中的所有*應該是'&&'。 – Barmar

回答

-1

您正在混合同步和異步代碼。

當您附加一個deviceorientation事件處理程序時,它是同步的。之後立即執行for循環。

當一個deviceorientation事件被觸發時,你的findPlace函數被異步調用。換句話說,你的腳本不會打電話。瀏覽器確實如此。

事情是,你也同時呼叫findPlacefor循環。而您的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規格說它可能會發生,但它相當於0.無論如何,這是一個罕見的情況,並沒有造成太大的麻煩。

+0

Thx很多爲您的幫助,這沒有工作:) –

+0

現在我試圖找出爲什麼android有一個不同的alpha開始:/ –

+0

正如[MDN上說](https:// developer.mozilla.org/en-US/docs/Web/API/Detecting_device_orientation):「警告:Chrome和Firefox不能以相同的方式處理角度,所以在某些軸上方向相反。「猜你可以用」Android「替代」Chrome「。您是否首先使用Firefox進行測試? – Watilin