jQuery callback under callback

by OmShiv

HTML

<div class="slideshow">
    <div id="a">A</div>
    <div id="b">B</div>
    <div id="c">C</div>
</div>

CSS

.slideshow div {
    padding: 50px; 
    border: 1px solid green;
    background: #9FC;
    display: none;
    
    /* extra */
    width: 20px;
    margin: 10% auto;
    border-radius: 10px;
    box-shadow: 0 0 10px rgba(0,0,0,0.5);
}

JavaScript

function constantAnimate(time, delay, func) {
    $('#a').fadeIn(time, function() {
        $(this).delay(delay).fadeOut(time, function() {
            $('#b').fadeIn(time, function(){
                $(this).delay(delay).fadeOut(time, function() {
                    $('#c').fadeIn(time, function(){
                        $(this).delay(delay).fadeOut(time, function() {
                            if (func && (typeof func == "function") ) {
                                func();
                            } else {
                                constantAnimate(time, delay);
                            }
                        });
                    });
                });
            });
        });
    });
}

constantAnimate(300, 500);