AngularJs ul 使用幻灯片动画展开/折叠

Posted

技术标签:

【中文标题】AngularJs ul 使用幻灯片动画展开/折叠【英文标题】:AngularJs ul expand/collapse with slide animation 【发布时间】:2015-01-05 20:52:56 【问题描述】:

ng-show 更改时,我正在尝试为 ul height 设置动画,用于幻灯片效果动画。 我最初的想法是将高度从 height:0 设置为 height:100% 或 height:auto 但它不起作用..

this post,表示无法为百分比设置动画,只能设置绝对值。

而this is 看起来不像是一个优雅而干净的解决方案。

“将最大高度设置为比你的盒子更大的东西”的解决方案,这也不是好的解决方案,因为动画持续时间将取决于 ul 中的 li 数。

知道如何为任何ul 制作幻灯片(高度)动画,无论它包含多少 li。

【问题讨论】:

【参考方案1】:

这里有一些做这项工作的指令 - 动画自动而不使用最大高度/宽度

angular.module('kControlModule').directive("kAutoAnimation", function ()
        
            return 
                restrict: 'A',
                scope: 
                    animateChanged: '=',
                    type: '@'//height /width
                ,
                link: function (scope, element, attrs)
                    
                        var isFirstTime = true;
                        var elementHeight;
                        var elementWidth;

                        if (_.isUndefined(scope.type))
                            
                                scope.type = "height";
                            

                        scope.$watch('animateChanged', function (newVal)
                        
                            if (scope.type == "height")
                                
                                    if (isFirstTime)
                                        
                                            elementHeight = $(element).height();
                                            $(element).css('height', 0)
                                        
                                    if (newVal)//isShow
                                        
                                            if (isFirstTime)
                                                
                                                    $(element).height(elementHeight);
                                                    isFirstTime = false;
                                                
                                            else
                                                
                                                    elementHeight = $(element).css('height', 'auto').height();
                                                    $(element).css('height', 0)
                                                    $(element).animate( height: elementHeight , 400)
                                                
                                        
                                    else
                                        
                                            if (isFirstTime)
                                                
                                                    $(element).height(0);
                                                    isFirstTime = false;
                                                
                                            else
                                                
                                                    $(element).animate( height: 0 , 250)
                                                
                                        
                                
                            else//width
                                
                                    if (isFirstTime)
                                        
                                            elementWidth = $(element).width();
                                            $(element).css('width', 0)
                                        
                                    if (newVal)//isShow
                                        
                                            if (isFirstTime)
                                                
                                                    $(element).width(elementWidth);
                                                    isFirstTime = false;
                                                
                                            else
                                                
                                                    elementWidth = $(element).css('width', 'auto').width();
                                                    $(element).css('width', 0)
                                                    $(element).animate( width: elementWidth , 400)
                                                
                                        
                                    else
                                        
                                            if (isFirstTime)
                                                
                                                    $(element).width(0);
                                                    isFirstTime = false;
                                                
                                            else
                                                
                                                    $(element).animate( width: 0 , 250)
                                                
                                        
                                


                        );
                    
            ;
        );

使用:

 <div  k-auto-animation animate-changed="showCommands">
       ...                     
  </div>

【讨论】:

以上是关于AngularJs ul 使用幻灯片动画展开/折叠的主要内容,如果未能解决你的问题,请参考以下文章

UItableViewCell 展开/折叠动画(展开时有效,但不折叠)

AngularJS - 找到折叠动画的结束

SwiftUI 动画列表行的展开和折叠

java 使用材质动画更改视图的大小(展开或折叠)。

UITableViewCell 折叠时展开和折叠动画不起作用

WindowsForm给窗口添加一些简单的动画效果