JSFiddle - React, Tailwind, and code Playground

by tylerweeres

HTML

<h3>Animations</h3>
<div data-bind="foreach: { data: people, beforeRemove: animateOut }">
    <div style="padding: 5px;" class="person">
        <span data-bind="text: name" style="display: inline-block; width: 200px;"></span>
        <button style="padding: 5px 15px;" data-bind="click: $parent.removePerson">Remove</button>
    </div>
</div>

CSS

.person {
    font-family: georgia;
    padding: 5px;
    transition: all 600ms ease-in-out;
    transform-origin: 75px;
}

.person.remove {
    transform: translateX(2000px) rotateZ(540deg);
}

JavaScript

function vm () {
    "use strict";
    var me = this;
    
    me.people = ko.observableArray([
        { "name": "Irma Olsen" },
        { "name": "Winifred Cabrera" },
        { "name": "Kelly Hurley" },
        { "name": "Fredericka Blackburn" },
        { "name": "Bruce Patel" },
        { "name": "Jamal House" },
        { "name": "Hasad Mathis" },
        { "name": "Abigail Cleveland" },
        { "name": "Samantha Mccullough" },
        { "name": "Aileen Jimenez" },
        { "name": "Brendan Taylor" },
        { "name": "Charissa Fuller" },
        { "name": "Chester Gaines" },
        { "name": "Amos Little" },
        { "name": "September Sparks" },
        { "name": "Linus Logan" },
        { "name": "Porter Case" },
        { "name": "Giacomo Drake" },
        { "name": "Sylvester Mcknight" },
        { "name": "Alfreda Irwin" },
        { "name": "Chase Alexander" },
        { "name": "Norman Delacruz" },
        { "name": "Colby Bond" },
        { "name": "Blair Webb" },
        { "name": "Lucius Howard" },
        { "name": "Hedda Santana" }
    ]);
    
    me.removePerson = function (person) {
        me.people.remove(person);
    };
    
    me.animateOut = function animateOut(node, i, person) {
        // Make sure it's not a text node
        if (node.nodeType == Node.ELEMENT_NODE) {
            node.addEventListener("transitionend", function () {
                this.parentElement.removeChild(this);
            });
            node.classList.add("remove");
        }
    }
}

ko.applyBindings(new vm());