Modifying DOM (slideDown/slideUp) with AngularJS and jQuery

后端 未结 2 1369
说谎
说谎 2021-02-02 12:29

I\'m trying to implement a slideDown/slideUp animation with AngularJS. I can\'t use CSS3\'s transition (unfortunately) since the height is set to auto

相关标签:
2条回答
  • 2021-02-02 12:31

    I want to show an example of how this is done with ng-if, since I was looking for a solution for hours running into multiple completely different approaches that work with ng-show only. You may use ng-if vs ng-show if say you need directives initialized only upon becoming visible.

    To use jQuery slideDown / slideUp with ng-if, you can also use ngAnimate but using different hooks: enter and leave.

    app.animation('.ng-slide-down', function() {
      return {
        enter: function(element, done) {
          element.hide().slideDown()
          return function(cancelled) {};
        },
        leave: function(element, done) { 
          element.slideUp();
        },
      };
    });
    
    <div class="ng-slide-down" ng-if="isVisible">
         I will slide down upon entering the DOM.
    </div>
    

    This was surprisingly difficult to accomplish, even trying various JS based approaches and CSS only approaches. Ultimately there is a time and place for jQuery's animations.

    0 讨论(0)
  • 2021-02-02 12:32

    Alternatively, you can use AngularJS's $animate:

    .animation('.slide', function() {
        var NG_HIDE_CLASS = 'ng-hide';
        return {
            beforeAddClass: function(element, className, done) {
                if(className === NG_HIDE_CLASS) {
                    element.slideUp(done); 
                }
            },
            removeClass: function(element, className, done) {
                if(className === NG_HIDE_CLASS) {
                    element.hide().slideDown(done);
                }
            }
        }
    });
    

    Use ng-hide or ng-show to show or hide the description.

        <li ng-repeat="entry in data">
            <span>{{entry.title}}</span>
            <a ng-click="expand = !expand" href="#">more?</a>
            <p class="slide" ng-show="expand">{{entry.description}}</p>
        </li>
    

    See JSFiddle

    P.S. you must include jquery and angular-animate.js

    0 讨论(0)
提交回复
热议问题