2016-06-10 98 views
0

當我點擊div時,我想要第二個div展開/摺疊。這是使用JS,HTML和CSS完成的。現在我想把CSS轉換爲動畫。一個div的CSS過渡不生成

現在我所得到的只是一個跳躍擴展,或者是一個滾動(邊緣)或一個等待(Chrome,Opera,Firefox)之後的跳轉。

我試着把高度設置爲1px而不是0px,但是這並沒有改變任何東西。

function growDiv(id) { 
 
    var ele = document.getElementById(id); 
 
    if (ele.style.height == '100%') { 
 
    ele.style.height = '0px'; 
 
    } else { 
 
    ele.style.height = '100%'; 
 
    } 
 
}
.main { 
 
    font-weight: 700; 
 
    overflow: hidden; 
 
    cursor: pointer; 
 
} 
 
.secondary { 
 
    -webkit-transition: height .5s ease; 
 
    -moz-transition: height .5s ease; 
 
    -ms-transition: height .5s ease; 
 
    -o-transition: height .5s ease; 
 
    transition: height .5s ease; 
 
    overflow: hidden; 
 
    padding-left: 20px; 
 
    height: 0px; 
 
    cursor: pointer; 
 
}
<div class="main" onclick="growDiv('expandable')"> 
 
    Expand 
 
</div> 
 
<div class="secondary" id="expandable" onclick="growDiv('expandable')"> 
 
    number1, 
 
    <br>number2, 
 
    <br>number3, 
 
    <br>number4. 
 
</div>

Codepen的行爲,因爲我知道完整的網站呢,所以良好的措施;這裏的codepen:http://codepen.io/anon/pen/ezJQjM

+2

使用PX而不是在你的codepen上工作的%(在JS函數中) – LordNeo

+2

你不能在px和%之間設置動畫效果 –

回答

0

你願意使用jQuery它提供了一些很酷的動畫的可能性,並可能完成你正在嘗試做這僅僅是一種可能的選擇你的方法

看看我的提琴在這裏:。

https://jsfiddle.net/3mo28z1t/11/

<div class="main" id="clicker"> 
    Expand 
</div> 
<div class="secondary" id="expandable"> 
    number1, <br> number2, <br> number3, <br> number4. 
</div> 

<script> 
$(document).ready(function() { 

$(".secondary").hide(); 

$(document).ready(
    function(){ 
     $("#clicker").click(function() { 
      $(".secondary").toggle("slow"); 
     }); 

    }); 

}); 
</script> 
+0

我試圖遠離JQuery來減小頁面大小。它可能只是84 kB,但如果我能避免它,我更願意這樣做 - 特別是因爲我的項目的其餘部分現在只有34 kB。另外,我不明白downvote;我從來沒有特別要求過沒有JQuery的解決方案,就像我沒有要求提供JQuery解決方案一樣。我會嘗試你的解決方案,謝謝。 – Alrekr

+0

工程就像一個魅力。謝謝。我不得不在頭部包含JQuery,而不是像我嘗試的那樣在底部。 – Alrekr

+0

完美!我很高興這爲你解決。 – NickyTheWrench

1

http://css3.bradshawenterprises.com/animating_height/ 而不是使用100%,只是「讓它」通過不限制它獲得自動值。

注:100px的是 「比實際尺寸更大的任何數量的」 剛

function growDiv(id) { 
 
    var ele = document.getElementById(id); 
 
    if (ele.style.maxHeight != '0vh') { 
 
    ele.style.maxHeight = '0vh'; 
 
    } else { 
 
    ele.style.maxHeight = "100vh"; 
 
    } 
 
}
.main { 
 
    font-weight: 700; 
 
    overflow: hidden; 
 
    cursor: pointer; 
 
} 
 
.secondary { 
 
    -webkit-transition: all .5s ease; 
 
    -moz-transition: all .5s ease; 
 
    -ms-transition: all .5s ease; 
 
    -o-transition: all .5s ease; 
 
    transition: all .5s ease; 
 
    overflow: hidden; 
 
    padding-left: 20px; 
 
    cursor: pointer; 
 
}
<div class="main" onclick="growDiv('expandable')"> 
 
    Expand 
 
</div> 
 
<div class="secondary" id="expandable" onclick="growDiv('expandable')" style="max-height: 0vh;"> 
 
    number1, 
 
    <br>number2, 
 
    <br>number3, 
 
    <br>number4. 
 
</div>

編輯:改變了一切,以VH(視高度),所以它永遠不會大於100%的屏幕高度,並將適應任何屏幕的最大高度。 也將「style =」max-height:0vh;「切換到元素本身而不是類,所以如果需要,您可以用ele.style取消設置它(否則您需要設置一個新值來覆蓋類。?。

+0

現在轉換工作。但它不能很好地擴展。假設我在一個清單中有四點,但另外有二十點。 (嚴格來說,實現不是一個列表,但爲了爭論..)我當然可以讓該函數接受一個最大高度並手動調整它,但是這會產生不同屏幕大小的問題。任何建議以編程方式解決它? – Alrekr

+0

您可以將所有內容都更改爲「vh」(從0vh開始,然後將最大高度增加到100vh),因此它永遠不會超過屏幕尺寸的100%。 1vh =視口高度的1%。編輯答案時,應該工作得很好,除非其中一個「列表」實際上大於一個屏幕高度,當然,您可以將此設置調整爲200vh或任何最長列表的大小。 – LordNeo

0

該問題是由切換度量單位引起的,因此從像素到百分比。我可能會做一點不同,但是。

growDiv = function(id) { 
 
    document.getElementById(id).classList.toggle('expanded'); 
 
}
.main { 
 
    font-weight: 700; 
 
    overflow: hidden; 
 
    cursor: pointer; 
 
} 
 
.secondary { 
 
    transition: max-height .5s ease; 
 
    overflow: hidden; 
 
    padding-left: 20px; 
 
    max-height: 0; 
 
    cursor: pointer; 
 
} 
 
.secondary.expanded { 
 
    height: 100%; 
 
    max-height: 100px; 
 
}
<div class="main" onclick="growDiv('expandable')"> 
 
    Expand 
 
</div> 
 
<div class="secondary" id="expandable" onclick="growDiv('expandable')"> 
 
    number1, 
 
    <br>number2, 
 
    <br>number3, 
 
    <br>number4. 
 
</div>

你會注意到JS是有點簡單,它更多地依賴於CSS。

+0

美麗的解決方案,但缺乏規模。如果我添加number5,number6和number7,number6中途切斷,number7不顯示。我想我想要的東西不是我所要求的。 – Alrekr

+0

您可以將最大高度設置爲更大的數字以顯示更多結果。 –