How to run jQuery fadeIn() and slideDown() simultaneously?

前端 未结 7 1557
天涯浪人
天涯浪人 2020-12-13 01:38

I\'ve got a div with display: none; Now I want to show it using both: fadeIn and slideDown simultaneously.

$(this).slideDown({duration: \'slow\', queue: fals         


        
相关标签:
7条回答
  • 2020-12-13 02:16
    $('.target')                    
        .hide()  
        .slideDown(500, 'swing')  
        .css('opacity', 0)  
        .animate({opacity: 1}, {queue: false, duration: 1000});
    
    0 讨论(0)
  • 2020-12-13 02:17

    It's possible now to use CSS3 transitions. It allows to achieve very flexible solutions.

    HTML

    <div id="btn">Click me</div>
    <div id="hidden"></div>
    

    CSS

    #hidden {
        display: none; opacity: 0; height: 100px; background: red;
        transition: opacity 600ms ease-in-out 0s;
    }
    #hidden.opened {
        opacity: 1;
    }
    

    jQuery

    $('#btn').click(function() {
        var div = $('#hidden');
        if ( ! div.is(':animated')) {
            div.slideToggle(600).toggleClass('opened');
        }
    });
    
    0 讨论(0)
  • 2020-12-13 02:22

    start with height:0px and opacity:0; filter: alpha(opacity = 0) then on the action do:

    $(this).stop().animate({
        height: 200,
        opacity: 1
    }, 350);
    

    Change the height (i set to 200) and the duration (i set to 350) to whatever you want.

    0 讨论(0)
  • 2020-12-13 02:31

    Use animate() instead of fadeIn():

    $(this)
      .css('opacity', 0)
      .slideDown('slow')
      .animate(
        { opacity: 1 },
        { queue: false, duration: 'slow' }
      );
    
    0 讨论(0)
  • 2020-12-13 02:33

    The more modern solution is to use values of 'show' and 'hide' when you want to combine animations:

    $('.show').on('click', function () {
      $('.example').animate({
        opacity: 'show',
        height: 'show',
        marginTop: 'show',
        marginBottom: 'show',
        paddingTop: 'show',
        paddingBottom: 'show'
      })
    })
    $('.hide').on('click', function () {
      $('.example').animate({
        opacity: 'hide',
        height: 'hide',
        marginTop: 'hide',
        marginBottom: 'hide',
        paddingTop: 'hide',
        paddingBottom: 'hide'
      })
    })
    .example {
      background-color: blue;
      height: 200px;
      width: 200px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <p>
      <button type="button" class="show">Show</button>
      <button type="button" class="hide">Hide</button>
    </p>
    <div class="example"></div>

    0 讨论(0)
  • 2020-12-13 02:34

    Here is my solution, you can use it as a jQuery plugin.

    (function($) {
        'use strict';
        // Sort us out with the options parameters
        var getAnimOpts = function (a, b, c) {
                if (!a) { return {duration: 'normal'}; }
                if (!!c) { return {duration: a, easing: b, complete: c}; }
                if (!!b) { return {duration: a, complete: b}; }
                if (typeof a === 'object') { return a; }
                return { duration: a };
            },
            getUnqueuedOpts = function (opts) {
                return {
                    queue: false,
                    duration: opts.duration,
                    easing: opts.easing
                };
            };
        // Declare our new effects
        $.fn.showDown = function (a, b, c) {
            var slideOpts = getAnimOpts(a, b, c), fadeOpts = getUnqueuedOpts(slideOpts);
            $(this).hide().css('opacity', 0).slideDown(slideOpts).animate({ opacity: 1 }, fadeOpts);
        };
        $.fn.hideUp = function (a, b, c) {
            var slideOpts = getAnimOpts(a, b, c), fadeOpts = getUnqueuedOpts(slideOpts);
            $(this).show().css('opacity', 1).slideUp(slideOpts).animate({ opacity: 0 }, fadeOpts);
        };
    }(jQuery));
    

    Now you can use it the same way you would use jQuery’s .fadeIn (or fadeOut) effect.

    // Show
    $('.alert').showDown('slow');
    // Hide
    $('.alert').hideUp('fast', function() {
        // Animation complete: '.alert' is now hidden
    });
    

    This will resize our element’s height with a fading effect.

    It was originally posted on my blog.

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