Transition exit page
Keyframes animation before page unload
by Léo Durand
HTML
<svg id="fader"></svg>
<script>fadeInPage()</script>
<a id="link" class="link-transition" href="example.html">Click me!</a>
CSS
#fader {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 999999;
pointer-events: none;
opacity:0;
background: black;
animation-duration: 500ms;
animation-timing-function: ease-in-out;
}
@keyframes pageFade-in {
from {
opacity: 0
}
to {
opacity: 1
}
}
#fader.pageFade-in {
opacity: 1;
animation-name: pageFade-in;
}
@keyframes translateY-in {
from {
margin-top: -20px;
}
to {
margin-top: 0px;
}
}
JavaScript
document.addEventListener('DOMContentLoaded', function() {
if (!window.AnimationEvent) {
return
}
var anchors = document.getElementsByClassName("link-transition");
for (var idx = 0; idx < anchors.length; idx += 1) {
if (anchors[idx].hostname !== window.location.hostname) {
continue;
}
anchors[idx].addEventListener('click', function(event) {
var fader = document.getElementById('fader'),
anchor = event.currentTarget;
var listener = function() {
window.location = anchor.href;
fader.removeEventListener('animationend', listener);
};
fader.addEventListener('animationend', listener);
event.preventDefault();
fader.classList.add('pageFade-in');
});
}
});