2012-01-12 70 views
1

我遇到了這個我已經嘗試添加的代碼,但是我擔心我已經搞亂了它。我對Jquery或網頁設計不是非常有經驗,我需要幫助找到我做錯了什麼,以及如何才能更高效。jQuery手風琴幫助

是否有更好/更有效的方式來編寫此代碼?

它有一些錯誤...

  • 顯示負載時的所有div。我希望它只顯示一個我可以選擇的。
  • 當它動畫時,文字跳動出於某種原因。
  • 有時divs會動起來,但不會下降。

這裏是什麼樣子,現在的鏈接:http://dl.dropbox.com/u/14080718/Final/NeedHelp.html

<script> 
    $(document).ready(function() { 
     // the currently loaded section 
     var curLoaded = 'about'; 

     // navigation trigger 
     $('#navbar a').each(function() { 
      var $this = $(this) 
      var target = $this.attr('href').split('#')[1]; 
      var $contentContainer = $('#contentContainer'); 
      var oldPos = 0; 
      var newPos = 200; 

      // add a click handler to each A tag 
      $this.click(function(){ 
       // if the container isn't open, then open it 
       if ($contentContainer.css('height') == '') { 
        // trigger the animation 
        $contentContainer.animate({ 
         height: newPos 
        },"slow", function(){ 
         // fade in the content 
         $('#' + target).fadeIn(); 
        }); 
       } else { 
        if (curLoaded == target) { 
         $contentContainer.animate({ 
          height: oldPos 
         },"slow", function(){ 
          $('#content div').hide(); 
         }); 
        } else { 
         $contentContainer.animate({ 
          height: oldPos 
         },"slow", function(){ 
          $('#content div').hide(); 
          $contentContainer.animate({ 
           height: newPos 
          },"slow", function(){ 
           $('#' + target).fadeIn(); 
          }); 
         }); 
        } 
       } 
       curLoaded = target; 

       return false; 
      }); 
     }); 
    }); 
    </script> 
+0

[codereview.SE]網站可能是獲取您要查找的反饋類型的更好地方。如果您遇到特定問題並提供特定答案,SO最能幫助您解決問題。如果可能進行廣泛的討論,它可能不太合適。查看[The FAQ](http://stackoverflow.com/faq)查看最適合本網站的問題類型。 – 2012-01-12 08:36:37

+0

謝謝,我會去看看。 – 2012-01-12 17:55:40

+5

@ MerlynMorgan-Graham:根據[CodeReview的FAQ](http://codereview.stackexchange.com/faq),調試問題不應該在那裏。 NateGines:我認爲應該先修復這些bug,然後將其發佈到CodeReview以進行一般評論。因此,請編輯此問題以僅包含有關適用於SO的調試問題(而不是有效性)。 (我想CodeReview上的問題會因爲錯誤而關閉,但當bug修復時,可以隨時重新發布到CR。) – palacsint 2012-01-12 19:28:45

回答

0

我已經採取了看看你的網頁,並採取了快速的刺,以解決一些越野車的行爲。

首先,看起來您正在處理用戶第二次點擊導航鏈接的情況,方法是關閉content div,但如果用戶第三次單擊導航鏈接,則無法處理。作爲一個用戶,我希望無論點擊鏈接多少次,div都會打開或關閉。

爲了解決這個問題,我已經添加了一個檢查目標元素是否可見,我用它來決定是否滑動打開或關閉的內容。我還添加了對顯示的調用並隱藏目標和curloaded元素的函數,以確保檢查元素是否可見將提供預期結果。

我修改後的代碼如下。爲了簡化代碼,可能會合並某些案例的邏輯。

// navigation trigger 
$('#navbar a').each(function() { 
    var $this = $(this); 
    var target = $this.attr('href').split('#')[1]; 
    var $contentContainer = $('#contentContainer'); 
    var oldPos = 0; 
    var newPos = 200; 

    // add a click handler to each A tag 
    $this.click(function() { 
     // if the container isn't open, then open it 
     if ($contentContainer.css('height') === '') { 
      // trigger the animation 
      $contentContainer.animate({ 
        height: newPos 
       }, "slow", function() { 
        // fade in the content 
        $('#' + target).show().fadeIn(); 
       }); 
     } else { 
      if (curLoaded == target) { 
       if ($('#' + target).is(':visible')) { 
        $contentContainer.animate({ 
          height: oldPos 
         }, "slow", function() { 
          $('#' + curLoaded).hide(); 
          $('#content div').hide(); 
         }); 
       } else { 
        $contentContainer.animate({ 
          height: newPos 
         }, "slow", function() { 
          // fade in the content 
          $('#' + target).show().fadeIn(); 
         }); 
       } 
      } else { 
       $contentContainer.animate({ 
         height: oldPos 
        }, "slow", function() { 
         $('#' + curLoaded).hide(); 
         $('#content div').hide(); 
         $contentContainer.animate({ 
           height: newPos 
          }, "slow", function() { 
           $('#' + target).fadeIn(); 
          }); 
        }); 
      } 
     } 

     curLoaded = target; 

     return false; 
    }); 

}); 
+0

你太棒了!這現在很好用!如果我想添加一個可以讓手風琴打開,關閉或切換的類(如class =「open」,「close」或「toggle」)?我已經嘗試了一些東西,但是我一直在打破頁面,因爲我看起來可以得到正確的語法。 – 2012-01-13 17:18:48

+0

@Nate - 您將無法使用CSS類實現打開和關閉的動畫效果。 CSS只是描述了元素的視覺風格,並沒有真正的執行概念。您可以使用jQuery在元素上添加或刪除類,但無法說「緩慢將此類應用於此元素」。但是,您可以使用CSS類作爲元素上的標誌來指導您的jQuery代碼如何處理特定元素。即使用jQuery的選擇器語法「#navbar a.toggle」在#navbar中查找具有應用切換類的錨標記。 – 2012-01-13 17:32:44

1

在此拉琴的CSS將與所有的div初步顯示出了幫助。你能否更詳細地解釋了其他2個錯誤(我似乎沒有注意到它們)

Fiddler Code

+0

感謝您的提琴手代碼。它效果很好!至於其他問題...它看起來像是如果你點擊nav中的一個鏈接,#contentContainer div稍微改變,以及它的類型。此外,如果您快速連續點擊一堆鏈接,有時一個div會關閉,並且不會打開備份,直到單擊另一個鏈接。它似乎沒有這些問題在提琴手中,但id在Chrome,Safari和Firefox中。謝謝您的幫助! – 2012-01-12 17:51:47

+0

請在答案中張貼代碼。 SO上的答案應該是自包含的,以防萬一其他網站出現故障或人們無法訪問它,並且該帖子更易於搜索。 – 2012-01-12 18:38:02