I have this code in jQuery which works well, but I'm trying to transform it to vanilla JS (plain JavaScript), at first I will show you code in jQuery:
var prev = 0;
var $window = $(window);
var nav = $('.nav');
$window.on('scroll', function(){
var scrollTop = $window.scrollTop();
nav.toggleClass('hidden', scrollTop > prev);
prev = scrollTop;
});
body {
font-family: helvetica neue, helvetica, arial, sans-serif;
height: 8000px;
}
.nav {
background: #111;
text-align: center;
color: #fff;
height: 20px;
padding-top: 20px;
padding-bottom: 20px;
position: fixed;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
-webkit-transition: -webkit-transform 0.5s cubic-bezier(0.645, 0.045, 0.355, 1);
-moz-transition: -moz-transform 0.5s cubic-bezier(0.645, 0.045, 0.355, 1);
transition: transform 0.5s cubic-bezier(0.645, 0.045, 0.355, 1);
}
.nav.hidden {
-webkit-transform: translateY(-100%);
-moz-transform: translateY(-100%);
-ms-transform: translateY(-100%);
-o-transform: translateY(-100%);
transform: translateY(-100%);
}
p {
margin: 0;
padding: 20px;
<script
src="https://code.jquery.com/jquery-3.6.1.min.js"
integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ="
crossorigin="anonymous"></script>
<div class="nav">Scroll to show/hide this bar!</div>
<p>They see me scrolling...</p>
<p>Scroll down and back up to view the nav</p>
and here is code in vanilla js I made getting this error:
Uncaught SyntaxError: Failed to execute 'querySelector' on 'Document': '[object Window]' is not a valid selector.
var prev = 0;
var $window = document.querySelector(window);
var nav = document.querySelectorAll(".nav");
$window.addEventListener("scroll", function () {
var scrollTop =
window.pageYOffset ||
document.documentElement.scrollTop ||
document.body.scrollTop ||
0;
if (scrollTop > prev) {
nav.classList.toggle("hidden");
}
prev = scrollTop;
});
Can someone tell me where I am making a mistake please.
var prev = 0;
var nav = document.querySelectorAll(".nav");
window.addEventListener("scroll", function () {
var scrollTop =
window.pageYOffset ||
document.documentElement.scrollTop ||
document.body.scrollTop ||
0;
if (scrollTop > prev) {
nav.classList.toggle("hidden");
}
prev = scrollTop;
});
We solve problem on window object, but now we get another error on classlist toggle like:
Uncaught TypeError: Cannot read properties of undefined (reading 'toggle')