The scroll events trigger way more often than I want them to. All it should do is give the .swap class to the next Sibling if you scroll down (followed by an animation) and get rid of the .swap class of the current Element. Same thing just for upwards. What happens now is that it just basically goes to the last element and the first one if scrolled down/up. It is a one-pager which just switches in between different divs.
I've tried Debouncing, Throttling, and requestAnimationFrame but haven't been successful so far. For example: https://css-tricks.com/debouncing-throttling-explained-examples/
Thanks a lot!
HTML:
<div class="div1 swap">
<h1>Hello</h1>
</div>
<div class="div2">
<h1>Stack</h1>
</div>
<div class="div3">
<h1>Overflow</h1>
</div>
<div class="div4">
<h1>Please</h1>
</div>
<div class="div5">
<h1>Help</h1>
</div>
CSS:
.div1, .div2, .div3, .div4, .div5{
visibility: hidden;
position: fixed;
}
.swap{
visibility: visible;
-webkit-animation: slide-in-left .8s ease-out both;
animation: slide-in-left .8s ease-out both;
}
JS:
window.onscroll = function(event) {
var aktiv = document.querySelector('.swap');
if(this.oldScroll > this.scrollY){
console.log("Up");
aktiv.previousElementSibling.classList.toggle('swap')
aktiv.classList.toggle('swap')
}
else{
console.log("Down");
aktiv.nextElementSibling.classList.toggle('swap')
aktiv.classList.toggle('swap')
}
this.oldScroll = this.scrollY;
}