2012-12-10 64 views
2

我正在使用jQuery的slideToggle()函數來控制我網站的展開/摺疊功能。目前,我在整個網站上實施之前只有一個已經開發的頁面; here it isjQuery slideToggle()問題 - 更改顯示:塊以顯示:內聯表?

默認情況下,jQuery slideToggle()使用display =「block」這不是幫助我。我想讓它使用display =「inline-table」而不是當面板展開時,並且在同一面板摺疊時恢復爲display =「none」

有我申請到CSS,以確保佈局是我希望它是一些設置:

.specs { 
    width: 930px; 
    height: 100px; 
    border: none; 
    color: #ffffff; 
    font-weight: normal; 
    display: none; 
} 

height屬性是用來保證內所有的圖標面板完全可見。刪除它會導致像「Memory」這樣的小面板切斷一半圖標。

同時坍縮,面板被設置爲顯示=「無」,以確保它們不會影響佈局。但是,在擴展時,需要將它們設置爲display =「inline-table」以繞過您在查看諸如「Web瀏覽」和「後置攝像頭」等面板時可以看到的一些對齊問題(基本上,列表重疊下面的DIV以及行內表設置修復了這些問題)。

只要我能解決這個問題,我可以繼續實施這個設計到其他頁面。

P.S. - 目前正在使用,是Redsquare's method,所以擴大是好的,但他們不想崩潰。

謝謝,
迪倫。

+0

'注:值 「內聯表」, 「表」,在IE7中不支持「table-caption」,「table-cell」,「table-column」,「table-column-group」,「table-row」,「table-row-group」和「inherit」早。 IE8需要!DOCTYPE。 IE9支持這些值.' –

+0

@Bondye這是Chrome,Firefox和IE9。我的所有網頁都使用HTML5文檔類型。 – DylRicho

回答

0

這似乎對我有用。使用min-height代替height

.specs { 
    width: 930px; 
    /*min-height: 100px; CHECK UPDATE */ 
    border: none; 
    color: #ffffff; 
    font-weight: normal; 
    display: none; 
} 

UPDATE:看到它在行動在http://jsfiddle.net/LLQyV/1/

試試這個。從CSS中刪除最小高度。

在你的HTML中,將div中的每個規範都包含在toggleContainer中,如下所示(我重複了您的常規類別併爲每個類別添加了各種規範。)

<!-- General --> 
<div class="toggleContainer"> 
<div class="spec-cat"> 
<div class="spec-cat-content" id="general"><a href="#general">General</a> 
<span class="spec-cat-desc"></span></div> 
</div> 
<div class="specs" id="sec1"> 
    <ul> 
     <li>Manufactured by HTC</li> 
     <li>Also known as HTC Ville and HTC Z520e</li> 
     <li>Released in March 2012</li> 
     <li>£429 (GBP); $399 (USD)</li> 
     <li>Manufactured by HTC</li> 
     <li>Also known as HTC Ville and HTC Z520e</li> 
     <li>Released in March 2012</li> 
     <li>£429 (GBP); $399 (USD)</li> 
    </ul> 
</div> 
</div> 

<!-- General --> 
<div class="toggleContainer"> 
<div class="spec-cat"> 
<div class="spec-cat-content" id="general"><a href="#general">General</a> 
<span class="spec-cat-desc"></span></div> 
</div> 
<div class="specs" id="sec1"> 
    <ul> 
     <li>£429 (GBP); $399 (USD)</li> 
    </ul> 
</div> 
</div> 

<!-- General --> 
<div class="toggleContainer"> 
<div class="spec-cat"> 
<div class="spec-cat-content" id="general"><a href="#general">General</a> 
<span class="spec-cat-desc"></span></div> 
</div> 
<div class="specs" id="sec1"> 
    <ul> 
     <li>Manufactured by HTC</li> 
     <li>Also known as HTC Ville and HTC Z520e</li> 
    </ul> 
</div> 
</div> 

然後在您的JS文件做到這一點(我結合你的所有的onclick = '切換' 調用到這一點)

$(function() { 
    $(".toggleContainer").each(function() { 
     //store the .specs height to an unchanging attribute 
     $(this).find(".specs").attr("specHeight", $(this).find(".specs").height()); 

     //when the cat is clicked, expand or collapse the spec 
     $(this).find(".spec-cat-content").click(function(e) { 
      e.preventDefault(); 
      //find spec for current toggleContainer that contains this category toggle button 
      var spec = $(this).parent().parent().find(".specs"); 

      //check to see if the spec is displayed. 
      if ($(spec).css("display") == "none") { 
       //if it isn't then animate to specHeight attr and display block    $(spec).height(0); 
       $(spec).css("display","block"); 
       var newHeight=$(spec).attr("specHeight"); 
       if(newHeight<100) 
        newHeight=100; 
       $(spec).animate({height:newHeight},400); 
      } 
      else { 
       //if it is, then animate to 0 height, and display:none 
       $(spec).animate({height:0},400,function(){$(spec).css("display","none");}); 

      } 
     }); 
    }); 
});​ 
+0

嗨邁克爾。我現在將代碼添加到頁面上的所有類別。使用「高度」是因爲「內存」類別在其他情況下不顯示完整圖標。正如您現在應該能夠看到的那樣,點擊後類別不會崩潰。我試圖解決這個問題。 – DylRicho

+0

另外,我忘了提及使用'min-height'似乎使幻燈片轉換有點生澀。 – DylRicho

+1

檢查更新。這應該可以幫助你找到你想去的地方。 –

0

您不必使用slideToggle()內置函數,創建自己的函數。

使用.toggleClass():http://api.jquery.com/toggleClass/

事情是這樣的:

CSS:

.DisplayNone{ 
    display: none; 
} 

.DisplayInlineTable{ 
    display: inline-table; 
} 

然後創建onclick事件:

的jQuery:

$(parent).click(function(){ 
    $(child).toggleClass("DisplayInlineTable").slideToggle(); 
}); 
+0

你好。我也試過這個方法,如果你想取消註釋必要的編碼,你仍然可以訪問。我曾考慮過使用這種方法,但我不確定如何實現滑動動畫;最好是在兩個方向上進行的。 – DylRicho

+0

你可以使用.slideToggle():http://api.jquery.com/slideToggle/ – BorisD