0

I managed to slideDown the dropdown menu with the following code. But this obviously works only when the dropdown-toggle class is clicked.

How do I integrate the Bootstrap's function of when the li in the dropdown is clicked or when clicked outside, the dropdown menu dissapears.

$('.dropdown-toggle').click(function() {
    $(this).next('.dropdown-menu').slideToggle(500);
});
<div class="dropdown">
    <div class="dropdown-toggle" data-toggle="dropdown">Click Me</div>
    <ul class="dropdown-menu optfulwidth ulreligion">
        <li>one</li>
        <li>two</li>
        <li>three</li>
        <li>four</li>
    </ul> 
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

2
  • We need more information... Can you expand your example to include the relevant code? Commented Sep 19, 2016 at 20:07
  • @mhatch Done. Updated the code in the question. Commented Sep 19, 2016 at 20:23

2 Answers 2

2

you do not need additional css to have dropdown open and close.

<div class="dropdown clearfix">
 <div class="dropdown-toggle" data-toggle="dropdown"><a>Click Me</a></div>
  <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" >
  <li><a  href="#">One</a></li>
  <li><a href="#">Two</a></li>
  <li><a  href="#">three</a></li>

  </ul>
</div>

here is a bootply

and if you want it to slide down add the below

  // ADD SLIDEDOWN ANIMATION TO DROPDOWN //
$('.dropdown').on('show.bs.dropdown', function(e){
 $(this).find('.dropdown-menu').first().stop(true, true).slideDown();
});

// ADD SLIDEUP ANIMATION TO DROPDOWN //
$('.dropdown').on('hide.bs.dropdown', function(e){
$(this).find('.dropdown-menu').first().stop(true, true).slideUp();
 });
Sign up to request clarification or add additional context in comments.

2 Comments

The existing one only shows and hides. I want to add the slideUp and slideDown for the menu.
check again @Somename
0

If you want something more elaborated you could put together the awesome Animate.css, (a cross-browser library of CSS animations), a bit of jquery and of course, Twitter Boostrap.

In your header:

<head>
    ...
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous" />
</head>

In your body where you want to create the dropdown:

<div class="dropdown" data-animation="slideInDown,slideOutUp,600">
            <button type="button" class="btn btn-primary" data-toggle="dropdown">Click to toggle animated dropdown <i class="caret"></i></button>
            <ul class="dropdown-menu">
                <li><a href="#">Action</a></li>
                <li><a href="#">Another action</a></li>
                <li><a href="#">Something else here</a></li>
                <li class="divider"></li>
                <li><a href="#">Separated link</a></li>
            </ul>
        </div>

Note the data-animation attribute in the markup, you must provide 3 parameters, the in-animation, the out-animation and the duration.

You can play if you like with other animations.

In your footer (or wherever you render your scripts):

<script src="js/jquery-2.1.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script type="text/javascript">
    $(function () {

        var $in, $out, $duration;
        $('.dropdown')
            .on('shown.bs.dropdown',
                function (e) {
                    if ($(this).attr('data-animation')) {
                        let $animations = [];
                        const $animation = $(this).data('animation');
                        $animations = $animation.split(',');
                        $in = 'animated ' + $animations[0];
                        $out = 'animated ' + $animations[1];
                        $duration = '';
                        if (!$animations[2]) {
                            $duration = 500;
                        } else {
                            $duration = $animations[2];
                        }
                        $(this).find('.dropdown-menu').removeClass($out);
                        $(this).find('.dropdown-menu').addClass($in);
                    }
                });

        $('.dropdown')
            .on('hide.bs.dropdown',
                function (e) {
                    if ($(this).attr('data-animation')) {
                        e.preventDefault();
                        const $this = $(this);
                        const $targetControl = $this.find('.dropdown-menu');

                        $targetControl.addClass($out);
                        setTimeout(function () {
                            $this.removeClass('open');
                        },
                        $duration);
                    }
                });
    })
</script>

Hope this helps!

Need a full sample?

        $(function () {

            var $in, $out, $duration;
            $('.dropdown')
                .on('shown.bs.dropdown',
                    function (e) {
                        if ($(this).attr('data-animation')) {
                            let $animations = [];
                            const $animation = $(this).data('animation');
                            $animations = $animation.split(',');
                            $in = 'animated ' + $animations[0];
                            $out = 'animated ' + $animations[1];
                            $duration = '';
                            if (!$animations[2]) {
                                $duration = 500;
                            } else {
                                $duration = $animations[2];
                            }
                            $(this).find('.dropdown-menu').removeClass($out);
                            $(this).find('.dropdown-menu').addClass($in);
                        }
                    });

            $('.dropdown')
                .on('hide.bs.dropdown',
                    function (e) {
                        if ($(this).attr('data-animation')) {
                            e.preventDefault();
                            const $this = $(this);
                            const $targetControl = $this.find('.dropdown-menu');

                            $targetControl.addClass($out);
                            setTimeout(function () {
                                $this.removeClass('open');
                            },
                            $duration);
                        }
                    });
        })
<link href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.5.2/animate.min.css" rel="stylesheet"/>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous" />

<div class="dropdown" data-animation="slideInDown,slideOutUp,600">
            <button type="button" class="btn btn-primary" data-toggle="dropdown">Click to toggle animated dropdown <i class="caret"></i></button>
            <ul class="dropdown-menu">
                <li><a href="#">Action</a></li>
                <li><a href="#">Another action</a></li>
                <li><a href="#">Something else here</a></li>
                <li class="divider"></li>
                <li><a href="#">Separated link</a></li>
            </ul>
        </div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.