Vissza az animációkhoz
Gombanimációk

Törlés gomb animált

Élő előnézet – az animáció teljes méretben.

Élő előnézet
HTML · CSS · JS
HTML
<div class="we-delete-stage">

    <button class="we-delete-btn" id="weDeleteBtn" type="button">

        <span class="we-delete-burst" aria-hidden="true">
            <i></i>
            <i></i>
            <i></i>
            <i></i>
            <i></i>
            <i></i>
            <i></i>
            <i></i>
        </span>

        <span class="we-delete-trash" aria-hidden="true">
            <span class="we-delete-lid"></span>
            <span class="we-delete-body">
                <span></span>
                <span></span>
                <span></span>
            </span>
        </span>

        <span class="we-delete-label">
            Törlés
        </span>

        <span class="we-delete-success">
            <span class="we-delete-check">✓</span>
            <span>Törlés kész</span>
        </span>

    </button>

</div>
CSS
.we-delete-stage {
    min-height: 360px;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    background: #0b0f19;
}

.we-delete-btn {
    position: relative;
    width: 260px;
    height: 78px;
    padding: 0;
    border: 1px solid rgba(201, 103, 103, .38);
    border-radius: 22px;
    overflow: hidden;
    cursor: pointer;
    isolation: isolate;
    background: linear-gradient(135deg, #25191b, #130e10);
    color: #f4f1e9;
    font-family: Inter, system-ui, sans-serif;
    box-shadow:
        0 0 0 1px rgba(201, 103, 103, .06),
        0 18px 50px rgba(0, 0, 0, .42),
        inset 0 0 24px rgba(201, 103, 103, .035);
    transition:
        border-color .35s ease,
        box-shadow .35s ease,
        transform .25s ease;
}

.we-delete-btn:hover {
    transform: translateY(-2px);
    border-color: rgba(214, 119, 119, .72);
    box-shadow:
        0 0 25px rgba(201, 103, 103, .12),
        0 20px 55px rgba(0, 0, 0, .45);
}

.we-delete-label {
    position: absolute;
    inset: 0;
    z-index: 5;
    display: flex;
    align-items: center;
    justify-content: center;
    padding-left: 34px;
    font-size: 17px;
    font-weight: 700;
    letter-spacing: .2px;
    transition:
        opacity .25s ease,
        transform .35s ease;
}

.we-delete-trash {
    position: absolute;
    z-index: 6;
    left: 43px;
    top: 50%;
    width: 24px;
    height: 30px;
    transform: translateY(-50%);
}

.we-delete-lid {
    position: absolute;
    left: 3px;
    top: 2px;
    width: 18px;
    height: 4px;
    border-radius: 3px;
    background: #d67777;
    box-shadow: 0 0 8px rgba(214, 119, 119, .45);
    transform-origin: right center;
}

.we-delete-lid::after {
    content: "";
    position: absolute;
    left: 7px;
    top: -4px;
    width: 7px;
    height: 4px;
    border-radius: 3px 3px 0 0;
    background: #d67777;
}

.we-delete-body {
    position: absolute;
    left: 5px;
    top: 9px;
    width: 15px;
    height: 18px;
    border-radius: 2px 2px 5px 5px;
    background: linear-gradient(
        90deg,
        #b95f65,
        #d67777,
        #b95f65
    );
    box-shadow:
        0 0 9px rgba(214, 119, 119, .3),
        inset 2px 0 rgba(255, 255, 255, .12);
}

.we-delete-body span {
    position: absolute;
    top: 4px;
    width: 1px;
    height: 10px;
    background: rgba(48, 19, 21, .6);
    border-radius: 2px;
}

.we-delete-body span:nth-child(1) {
    left: 4px;
}

.we-delete-body span:nth-child(2) {
    left: 7px;
}

.we-delete-body span:nth-child(3) {
    left: 10px;
}

.we-delete-burst {
    position: absolute;
    z-index: 3;
    left: 50%;
    top: 50%;
    width: 1px;
    height: 1px;
    pointer-events: none;
}

.we-delete-burst i {
    position: absolute;
    left: 0;
    top: 0;
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: #d67777;
    opacity: 0;
    box-shadow: 0 0 8px rgba(214, 119, 119, .65);
}

.we-delete-burst i:nth-child(1) {
    --x: -78px;
    --y: -24px;
}

.we-delete-burst i:nth-child(2) {
    --x: 76px;
    --y: -27px;
}

.we-delete-burst i:nth-child(3) {
    --x: -91px;
    --y: 8px;
}

.we-delete-burst i:nth-child(4) {
    --x: 92px;
    --y: 13px;
}

.we-delete-burst i:nth-child(5) {
    --x: -57px;
    --y: 34px;
}

.we-delete-burst i:nth-child(6) {
    --x: 60px;
    --y: 37px;
}

.we-delete-burst i:nth-child(7) {
    --x: -32px;
    --y: -43px;
}

.we-delete-burst i:nth-child(8) {
    --x: 34px;
    --y: -45px;
}

.we-delete-success {
    position: absolute;
    inset: 0;
    z-index: 8;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    font-size: 16px;
    font-weight: 700;
    opacity: 0;
    transform: scale(.82);
    pointer-events: none;
    transition:
        opacity .35s ease,
        transform .45s cubic-bezier(.2, .8, .2, 1.2);
}

.we-delete-check {
    width: 27px;
    height: 27px;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid rgba(214, 119, 119, .75);
    border-radius: 50%;
    color: #d67777;
    box-shadow: 0 0 15px rgba(214, 119, 119, .22);
}

.we-delete-btn.is-active {
    border-color: rgba(214, 119, 119, .9);
    box-shadow:
        0 0 25px rgba(201, 103, 103, .2),
        0 0 55px rgba(201, 103, 103, .12),
        inset 0 0 30px rgba(201, 103, 103, .08);
}

.we-delete-btn.is-active .we-delete-label {
    opacity: 0;
    transform: translateY(-14px);
}

.we-delete-btn.is-active .we-delete-trash {
    animation: weDeleteTrashDrop .85s cubic-bezier(.4, 0, .2, 1) forwards;
}

@keyframes weDeleteTrashDrop {

    0% {
        opacity: 1;
        transform: translateY(-50%) rotate(0deg) scale(1);
    }

    28% {
        transform: translateY(-50%) rotate(-12deg) scale(1.05);
    }

    55% {
        transform: translateY(3px) rotate(14deg) scale(.9);
    }

    100% {
        opacity: 0;
        transform: translateY(22px) rotate(28deg) scale(.35);
    }
}

.we-delete-btn.is-active .we-delete-lid {
    animation: weDeleteLidOpen .55s ease-out forwards;
}

@keyframes weDeleteLidOpen {

    0% {
        transform: rotate(0deg) translate(0, 0);
    }

    45% {
        transform: rotate(24deg) translate(3px, -4px);
    }

    100% {
        transform: rotate(42deg) translate(5px, -6px);
    }
}

.we-delete-btn.is-active .we-delete-burst i {
    animation:
        weDeleteBurst .9s .35s cubic-bezier(.2, .8, .2, 1) forwards;
}

@keyframes weDeleteBurst {

    0% {
        opacity: 0;
        transform: translate(0, 0) scale(.2);
    }

    25% {
        opacity: 1;
        transform: translate(
            calc(var(--x) * .28),
            calc(var(--y) * .28)
        ) scale(1);
    }

    100% {
        opacity: 0;
        transform:
            translate(var(--x), var(--y))
            scale(.15);
    }
}

.we-delete-btn.is-complete .we-delete-trash,
.we-delete-btn.is-complete .we-delete-label,
.we-delete-btn.is-complete .we-delete-burst {
    opacity: 0;
}

.we-delete-btn.is-complete .we-delete-success {
    opacity: 1;
    transform: scale(1);
}

.we-delete-btn.is-complete {
    border-color: rgba(214, 119, 119, .72);
    box-shadow:
        0 0 28px rgba(201, 103, 103, .16),
        inset 0 0 25px rgba(214, 119, 119, .05);
}
JavaScript
(function () {

    const button =
        document.getElementById("weDeleteBtn");

    if (!button) {
        return;
    }

    let running = false;

    button.addEventListener("click", function () {

        if (running) {
            return;
        }

        running = true;

        button.classList.remove("is-complete");

        button.classList.add("is-active");

        setTimeout(function () {

            button.classList.remove("is-active");

            button.classList.add("is-complete");

        }, 1550);

        setTimeout(function () {

            button.classList.remove("is-complete");

            running = false;

        }, 3600);

    });

})();