Angular ng-class 製作動畫 DOM 的出現/消失效果
最近在研究用 Angular 做動畫,看了一下就是搭配 CSS 的 transition ,這樣只要換 css 就會有動畫了。
HTML 類似這樣
主要是在 ng-click="showDetails = ! showDetails" 的時候切換 class ,要切換的 class 類似 ng-class="{ 'hidden': ! showDetails }" 放在DOM裡。
CSS 就是這次的重點了。
要注意的是因為是做垂直的切換,所以控制 height 就可以了,但有遇到問題是只用 height 的話不會有動畫效果,要在前後都使用 max-height 設定高度,隱藏的時候設 0 ,要展現的時候只要設定 max-height 比展開後的 height 還高就可以了,這樣動畫效果就會正常了。
Demo
HTML 類似這樣
- <a ng-click="showDetails = ! showDetails">{{procedure.definition}}</a>
- <div class="procedure-details" ng-class="{ 'hidden': ! showDetails }">
- <p>content</p>
- </div>
主要是在 ng-click="showDetails = ! showDetails" 的時候切換 class ,要切換的 class 類似 ng-class="{ 'hidden': ! showDetails }" 放在DOM裡。
CSS 就是這次的重點了。
- a{
- display: block;
- width:100px;
- color:#fff;
- background:#d41b3a;
- border-radius:4px;
- text-align:center;
- text-decoration:none;
- padding:4px 10px;
- }
- li {
- list-style: none;
- padding: 10px;
- }
- .procedure-details {
- max-height: 100px;
- transition: .8s;
- overflow: hidden;
- }
- .procedure-details.hidden {
- max-height: 0;
- }
要注意的是因為是做垂直的切換,所以控制 height 就可以了,但有遇到問題是只用 height 的話不會有動畫效果,要在前後都使用 max-height 設定高度,隱藏的時候設 0 ,要展現的時候只要設定 max-height 比展開後的 height 還高就可以了,這樣動畫效果就會正常了。
Demo
留言