on('.m1', 'animationend', function() { var classlist = Array.prototype.slice.apply(this.classList); if (classlist.indexOf('dnone') == -1) { this.classList.add('dnone') } else { setTimeout(function(){ this.parentNode.removeChild(this) }, 1000) } }) on('button', 'click', function() { select('.m1').classList.toggle('leave'); }) function select(selector) { return document.querySelector(selector) } function on(selector, eventName, cb) { select(selector).addEventListener(eventName, cb); }
<div class="m m1"></div> <div class="m m2"></div> <button>Click</button>
.m { width: 200px; height: 100px; margin-bottom: 20px; will-change: transform; } .m1 { background: #f90; } .m2 { background: #90f; } .leave { animation: right 1s ease-out forwards; will-change: height; } .dnone { animation: dnone .2s ease-out forwards; } @keyframes right { 0% { transform: translate3d(0,0,0); opacity: 1; } 100% { transform: translate3d(200%,0,0); opacity: 0; } } @keyframes dnone { 0% { transform: translate3d(200%,0,0) scale(1,1); opacity: 0; } 100% { transform: translate3d(200%,0,0) scale(1,0); opacity: 0; height: 0px; margin: 0; } }