Animation sequencing

by alano

HTML

<button onclick="doStart()">Start</button><br />
<div class="container"><div id="div1" class="content">Div 1</div></div>
<div class="container"><div id="div2" class="content">Div 2</div></div>
<div class="container"><div id="div3" class="content">Div 3</div></div>
<div class="container"><div id="div4" class="content">Div 4</div></div>
<div class="container"><div id="div5" class="content">DONE!</div></div>

CSS

div.container {
    position:relative; 
    height:100px; 
    width:100px; 
    float:left; }
div.content {
    position:absolute; 
    height:100%; 
    width:100%; 
    border:1px solid Blue; 
    display:none; 
    text-align:center; }
#div5 { border:none; color:Red; }

JavaScript

function doStart() {
    
    // list of divs
    var $divList = [$("#div1"), $("#div2"), $("#div3"), $("#div4"), $("#div5")];
    
    $divList.reduce(doNext, $.Deferred().resolve());
    function doNext(prev, $div, idx, $divs) {
        return $.when(prev).pipe(function () {
            if (idx) $divs[idx - 1].fadeOut(1500);
            return $div.fadeIn(1500).delay(3000).promise();
        });
    }
}