JSFiddle - React, Tailwind, and code Playground

by ozzon91

HTML

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

CSS

#container {
    width: 200px;
    border: 1px solid black;
    position: relative;
}
#container div {
    border: 1px solid black;
    position: relative;
}
#container a {
    display: block;
}

JavaScript

var animating = false;

$('#container').on('click', '.moveUp', function () {

    if (animating) {
        return;
    }

    var clickedDiv = $(this).closest('div'),
        prevDiv = clickedDiv.prev(),
        distance = clickedDiv.outerHeight();

    if (prevDiv.length) {
        animating = true;
        $.when(clickedDiv.animate({
            top: -distance
        }, 600),
        prevDiv.animate({
            top: distance
        }, 600)).done(function () {
            prevDiv.css('top', '0px');
            clickedDiv.css('top', '0px');
            clickedDiv.insertBefore(prevDiv);
            animating = false;
        });
    }
});