<div> animate switch

HTML

<div id="container">
    <div id="one"><a class="moveUp">div 1</a></div>
    <div id="two"><a class="moveUp">div 2</a></div>
    <div id="three"><a class="moveUp">div 3</a></div>
</div>

CSS

#container {
    width: 200px;
    color:#fff;
    position: relative;
    text-align:center;
}
#container div {
    position: relative;
    margin:10px;
    background:#ff00ab;
    padding:5px;
    border-radius:3px;
    text-align:center;
    display:inline-block;
}

JavaScript

var animating = false;

$('#container').on('click', '.moveUp', function () {
    
    var clickedDiv = $(this).parent(),
        prevDiv = clickedDiv.prev(),
        nextDiv = clickedDiv.next(),
        distance = clickedDiv.outerWidth() +
                   parseInt(clickedDiv.css('margin-left'), 10) + 
                   parseInt(clickedDiv.css('margin-right'), 10);
    
    if (!animating && prevDiv.length) {
        animating = true;
        $.when(clickedDiv.animate({
           left: "-=" + distance
        }, 1000),
        prevDiv.animate({
            left: "+=" + distance
        }, 1000)).done(function () {
            prevDiv.insertAfter(clickedDiv);
            nextDiv.insertAfter(prevDiv);
            prevDiv.css('left', '0px');
            clickedDiv.css('left', '0px');
            animating = false;
        });
    }
});