Skip to content

Instantly share code, notes, and snippets.

@IpsumLorem16
Created April 18, 2021 13:00
Show Gist options
  • Save IpsumLorem16/c468e1b637138ab73ee8da7b000087cf to your computer and use it in GitHub Desktop.
Save IpsumLorem16/c468e1b637138ab73ee8da7b000087cf to your computer and use it in GitHub Desktop.
Animated dismiss all button
<button class="dismiss-all-btn" data-no-focus-on-click>
<div class="dismiss-all-icon">
<div class="icon-bar top"></div>
<div class="icon-bar middle"></div>
<div class="icon-bar bottom"></div>
</div>
</button>
const dismissAllBtn = document.querySelector(".dismiss-all-btn");
dismissAllBtn.addEventListener("click", () => {
console.log('click');
dismissAllBtn.setAttribute('disabled','');
dismissAllBtn.blur();
dismissAllBtn.classList.add("slide-out");
//remove button when animation complete
setTimeout(()=>{
dismissAllBtn.classList.add('hidden');
},210);
//reset button for demo
setTimeout(() => {
dismissAllBtn.classList.remove("slide-out");
dismissAllBtn.removeAttribute('disabled','');
dismissAllBtn.classList.remove('hidden');
}, 800);
});
//prevent outline on click, while allowing to be focusable from keyboard
document.addEventListener("mousedown", event => {
if (event.target.hasAttribute("data-no-focus-on-click")) {
event.preventDefault();
}
});
body {
background-color: #a700a7;
}
.dismiss-all-btn {
display: inline-block;
margin-top: 20px;
margin-left: 20px;
cursor: pointer;
padding: 0;
border: none;
background: none;
-webkit-tap-highlight-color: transparent;
.dismiss-all-icon {
height: 13px;
width: 20px;
position: relative;
overflow: hidden;
pointer-events:none;
.icon-bar {
position: absolute;
width: 14px;
height: 3px;
background-color: white;
&.top {
left:0px
}
&.middle {
top: 5px;
left: 3px;
}
&.bottom {
right: 0px;
top: 10px;
}
}
}
&.slide-out .icon-bar {
&.top {
animation: slide-out-right 0.1s 0.1s forwards;
}
&.middle {
animation: slide-out-right 0.1s 0.05s forwards;
}
&.bottom {
animation: slide-out-right 0.1s 0s forwards;
}
}
}
@keyframes slide-out-right {
0% {
opacity: 1;
transform: translateX(0);
}
100% {
opacity: 0;
transform: translateX(60%);
}
}
.hidden {
display: none !important;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.2/css/all.min.css" rel="stylesheet" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment