<button class="beer-like" data-count="42">
    <svg class="right">
        <use xlink:href="#beer">
    </svg>
    <svg class="left">
        <use xlink:href="#beer">
    </svg>
</button>
        
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
    <symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 38" id="beer">
        <path d="M27.3442657,10.9323999 L27.3442657,30.4083463 C27.3442657,30.6656011 27.3885964,30.9208753 27.475256,31.1626416 L28.4584173,33.9055044 C28.8690541,35.0511154 28.286502,36.317526 27.1572509,36.7341117 C26.9189371,36.8220268 26.6673082,36.8669997 26.4137272,36.8669997 L8.6936804,36.8669997 C7.49208526,36.8669997 6.51799995,35.8788026 6.51799995,34.6597997 C6.51799995,34.402545 6.56233068,34.1472707 6.64899021,33.9055044 L7.63215163,31.1626416 C7.71881116,30.9208753 7.76314189,30.6656011 7.76314189,30.4083463 L7.76314189,10.9323999"></path>
        <path d="M7.37976466,10.7050955 C4.03739944,7.21236807 7.37976466,4.43127908 9.62402739,4.68029805 C10.9707312,-0.311641291 16.3416716,-0.14115035 17.4789469,4.68029805 C19.1709488,-0.486993238 25.0730464,0.289582317 25.3338664,5.22597205 C29.5557705,3.93166238 30.2108846,9.27699993 27.5781291,10.7050955 L17.4789469,10.7050955 C17.8529907,15.2710317 16.7308593,17.5539999 14.1125529,17.5539999 C11.4942463,17.5539999 10.5591369,15.2710317 11.3072244,10.7050955 L7.37976466,10.7050955 Z"></path>
        <path d="M7.62159994,12.5877999 C-4.64593547,12.5877999 3.03123906,24.2813068 7.62159994,28.5899998 L7.62159994,23.890911 C3.60560163,21.0340593 1.29269476,15.5984013 7.62159994,15.5984013 L7.62159994,12.5877999 Z"></path>
        <line x1="12.3051233" y1="20.3129998" x2="12.3186765" y2="29.1054606"></line>
        <line x1="17.8231233" y1="20.3129998" x2="17.8366765" y2="29.1054606"></line>
        <line x1="23.3411232" y1="16.4503999" x2="23.3546764" y2="29.1054606"></line>
    </symbol>
</svg>
        
<!-- dribbble - twitter -->
<a class="dribbble" href="https://dribbble.com/ai" target="_blank"><img src="https://cdn.dribbble.com/assets/dribbble-ball-mark-2bd45f09c2fb58dbbfb44766d5d1d07c5a12972d602ef8b32204d28fa3dda554.svg" alt=""></a>
<a class="twitter" target="_blank" href="https://twitter.com/aaroniker_me"><svg xmlns="http://www.w3.org/2000/svg" width="72" height="72" viewBox="0 0 72 72"><path d="M67.812 16.141a26.246 26.246 0 0 1-7.519 2.06 13.134 13.134 0 0 0 5.756-7.244 26.127 26.127 0 0 1-8.313 3.176A13.075 13.075 0 0 0 48.182 10c-7.229 0-13.092 5.861-13.092 13.093 0 1.026.118 2.021.338 2.981-10.885-.548-20.528-5.757-26.987-13.679a13.048 13.048 0 0 0-1.771 6.581c0 4.542 2.312 8.551 5.824 10.898a13.048 13.048 0 0 1-5.93-1.638c-.002.055-.002.11-.002.162 0 6.345 4.513 11.638 10.504 12.84a13.177 13.177 0 0 1-3.449.457c-.846 0-1.667-.078-2.465-.231 1.667 5.2 6.499 8.986 12.23 9.09a26.276 26.276 0 0 1-16.26 5.606A26.21 26.21 0 0 1 4 55.976a37.036 37.036 0 0 0 20.067 5.882c24.083 0 37.251-19.949 37.251-37.249 0-.566-.014-1.134-.039-1.694a26.597 26.597 0 0 0 6.533-6.774z"></path></svg></a>
.beer-like {
    --primary: #6D58FF;
    --secondary: #362A89;
    --border: #D1D6EE;
    --background: #fff;
    --shadow: #{rgba(#000D58, .1)};
    --shadow-light: #{rgba(#000D58, .05)};
    --color-add: #fff;
    --color-count: #646B8C;
    position: relative;
    outline: none;
    width: 100px;
    height: 100px;
    border-radius: 50%;
    border: 1px solid var(--border);
    background: var(--background);
    box-shadow: 0 1px var(--blur, 4px) var(--shadow-light), 0 2px calc(var(--blur, 4px) * 2) var(--shadow);
    cursor: pointer;
    padding: 0;
    -webkit-appearance: none;
    -webkit-tap-highlight-color: transparent;
    transition: box-shadow .3s;
    &:hover {
        --blur: 7px;
    }
    &:active {
        --blur: 3px;
    }
    &:before,
    &:after {
        content: var(--content, attr(data-count));
        display: block;
        position: absolute;
        right: 110%;
        top: 50%;
        font-family: inherit;
        text-align: center;
        font-weight: var(--fw, 500);
        color: var(--c, var(--color-count));
        font-size: var(--fs, 14px);
        width: 32px;
        height: 32px;
        line-height: 32px;
        margin: -16px 0 0 0;
    }
    &:after {
        --content: '+1';
        --fw: bold;
        --fs: 12px;
        --c: var(--color-add);
        border-radius: 50%;
        background: var(--primary);
        opacity: 0;
        transform: scale(.5);
    }
    .dot-primary,
    .dot-secondary {
        border-radius: 50%;
        background: #fff;
        box-shadow: inset 0 0 0 1px var(--inner, var(--primary));
        position: absolute;
        left: 0;
        top: 0;
        width: 4px;
        height: 4px;
    }
    .dot-secondary {
        --inner: var(--secondary);
    }
    svg {
        width: 30px;
        height: 38px;
        display: block;
        fill: #fff;
        z-index: 1;
        stroke: var(--stroke, var(--primary));
        stroke-width: 1.5;
        stroke-linecap: round;
        stroke-linejoin: round;
        position: absolute;
        left: 35px;
        top: 31px;
        transform: scaleX(var(--scale-x, 1)) rotate(10deg) translate(var(--x, -11px), var(--y, 4px)) translateZ(0);
        &.right {
            --stroke: var(--secondary);
            --scale-x: -1;
            --y: -4px;
        }
    }
    &.cheer {
        &:after {
            animation: count 1s ease;
        }
        svg {
            animation: cheer 1s ease;
        }
    }
}

@keyframes count {
    15% {
        opacity: 1;
        transform: scale(1.15) translateZ(0);
    }
    25% {
        transform: scale(.95) translateZ(0);
    }
    50% {
        transform: scale(1) translateZ(0);
    }
    60% {
        opacity: 1;
    }
    100% {
        transform: translateY(-60px) translateZ(0);
    }
}

@keyframes cheer {
    35% {
        transform: scaleX(var(--scale-x, 1)) rotate(16deg) translate(-18px, var(--y, 4px)) translateZ(0);
    }
    55% {
        transform: scaleX(var(--scale-x, 1)) rotate(6deg) translate(-9px, var(--y, 4px)) translateZ(0);
    }
}

html {
    box-sizing: border-box;
    -webkit-font-smoothing: antialiased;
}

* {
    box-sizing: inherit;
    &:before,
    &:after {
        box-sizing: inherit;
    }
}

// Center & dribbble
body {
    min-height: 100vh;
    display: flex;
    font-family: 'Inter UI', 'Inter', Arial;
    justify-content: center;
    align-items: center;
    background: #FBFCFF;
    .dribbble {
        position: fixed;
        display: block;
        right: 20px;
        bottom: 20px;
        img {
            display: block;
            height: 28px;
        }
    }
    .twitter {
        position: fixed;
        display: block;
        right: 64px;
        bottom: 14px;
        svg {
            width: 32px;
            height: 32px;
            fill: #1da1f2;
        }
    }
}
View Compiled
gsap.registerPlugin(Physics2DPlugin);

document.querySelectorAll('.beer-like').forEach(button => {

    button.addEventListener('click', e => {
        if(!button.classList.contains('cheer')) {

            button.classList.add('cheer');

            setTimeout(() => {
                particles(button, 12, 44, 38, -110, -80)
                button.dataset.count = parseInt(button.dataset.count) + 1;
            }, 500);

            setTimeout(() => button.classList.remove('cheer'), 1000);

        }
    });

});

function particles(parent, quantity, x, y, minAngle, maxAngle) {
    let minSize = 20,
        maxSize = 60;
    for(let i = quantity - 1; i >= 0; i--) {
        let angle = minAngle + Math.random() * (maxAngle - minAngle),
            size = minSize + Math.random() * (maxSize - minSize),
            velocity = 70 + Math.random() * (120 - 80),
            dot = document.createElement('div');
        dot.className = Math.random() >= .5 ? 'dot-primary' : 'dot-secondary';
        parent.appendChild(dot);
        gsap.set(dot, {
            opacity: 1,
            x: x,
            y: y,
            scale: size / 40
        });
        gsap.timeline({
            onComplete() {
                dot.remove();
            }
        }).to(dot, 1.8, {
            physics2D: {
                angle: angle,
                velocity: velocity,
                gravity: 125
            }
        }).to(dot, 1, {
            opacity: 0
        }, .8);
    }
}

External CSS

  1. https://cdn.jsdelivr.net/npm/inter-ui@3.11.0/inter.min.css

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/gsap/3.1.1/gsap.min.js
  2. https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/Physics2DPlugin3.min.js