我正在構建一個遠離鼠標並「圍繞」窗口的按鈕。我比較新的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();
}
有時您會顛倒moveAll和hideTemps的順序。這是故意的嗎? – 2012-08-17 00:18:02
@SteveWellens不好 - 好。我讓它們保持一致,但仍然看到了超過1個包裝。 – amacy 2012-08-17 00:25:52
我認爲問題出在你在if/else語句中調用hideTemp()的地方。將它從現在的位置刪除,並在每個if/else語句後立即放置。它看起來有時2 else語句執行的原因是因爲hideTemp被封入在第二個if/else中,而不是每次被調用來清除按鈕(不知道!) – 2012-08-17 00:51:58