2012-08-17 246 views
2

我正在構建一個遠離鼠標並「圍繞」窗口的按鈕。我比較新的jQuery/JavaScript,將其作爲學習練習(我受此頁面#4的啓發:http://panjiva.com/jobs/challenges)。if和elseif語句觸發

背景:這實際上是我的第二次嘗試,可能不是最優雅的解決方案。基本上,在第二個版本中,有隱藏的「臨時」按鈕與按鈕一起移動,並在按鈕開始離開屏幕時出現。 (我第一次嘗試只有兩個按鈕,但我遇到了問題)

下面是一個嵌套的if/else語句,用於檢測按鈕的一部分何時移出窗口,如果是,則顯示一個溫度按鈕在正確的位置給予「包裹」效果。它還檢查整個按鈕是否移出屏幕,如果是,則將按鈕移動到新的座標處(溫度按鈕已經暴露)。

我認爲這整個if/else語句應該只允許按鈕包裝到一邊,即使按鈕留在一個角落。但是,當離開角落時,有時會纏繞到2或3個角落。這是爲什麼發生?

我創建了一個與的jsfiddle的完整代碼:http://jsfiddle.net/aaronmacy/AVwpU/

所有幫助/建議將不勝感激!

// Is any part of the button about to move off the page? 

// To the top? 
if (edgeTop < 0) { 

    // Always wrap to the bottom 
    bottom.show(); 

    // Is the button disappearing? 
    if (edgeBottom < 0) { 
     // Move the button 
     buttonNextY += parseInt(viewportHeight); 
     moveAll(); 
     // Hide everything else 
     hideTemps(); 
    } 
    else { 
     moveAll(); 
    } 
} 
// To the right? 
else if (edgeRight > parseInt(viewportWidth)) { 

    // Wrap to the left 
    left.show(); 

    // Is the button disappearing? 
    if (edgeLeft > parseInt(viewportWidth)) { 
     buttonNextX -= parseInt(viewportWidth); 
     moveAll(); 
     hideTemps(); 
    } 
    else { 
     moveAll(); 
    } 
} 
// To the bottom? 
else if (edgeBottom > parseInt(viewportHeight)) { 

    // Wrap to the top 
    top.show(); 

    // Is the button disappearing? 
    if (edgeTop > parseInt(viewportHeight)) { 
     buttonNextY -= parseInt(viewportHeight); 
     moveAll(); 
     hideTemps(); 
    } 
    else { 
     moveAll(); 
    } 
} 
// To the left? 
else if (edgeLeft < 0) { 

    // Wrap to the right 
    right.show(); 

    // Is the button disappearing? 
    if (edgeRight < 0) { 
     buttonNextX += parseInt(viewportWidth); 
     moveAll(); 
     hideTemps(); 
    } 
    else { 
     moveAll(); 
    } 
} 
// If the button is completely inside the window 
else { 
    moveAll(); 
} 
+0

有時您會顛倒moveAll和hideTemps的順序。這是故意的嗎? – 2012-08-17 00:18:02

+0

@SteveWellens不好 - 好。我讓它們保持一致,但仍然看到了超過1個包裝。 – amacy 2012-08-17 00:25:52

+0

我認爲問題出在你在if/else語句中調用hideTemp()的地方。將它從現在的位置刪除,並在每個if/else語句後立即放置。它看起來有時2 else語句執行的原因是因爲hideTemp被封入在第二個if/else中,而不是每次被調用來清除按鈕(不知道!) – 2012-08-17 00:51:58

回答

1

我認爲他們的要求不清楚「屏幕的另一面」......我會說你的腳本工作正常。他們沒有真正考慮獎金需求,他們只是添加它來看看哪個候選人會付出更多的努力....無論如何,讓你的按鈕之間的距離更遠,至少添加按鈕寬度x和y軸按鈕高度。 ..並且不要隱藏任何副本。它會自然包裹,相信我;)