I am using HTML, CSS and JavaScript to create a web page with a sticky and responsive navigation bar. I created the responsive navigation bar and am trying to make it sticky as well. The issue is that it's not sticky and shows error:
Uncaught TypeError: Cannot read property 'offsetTop' of null
HTML code:
<div class=topnav id=myTopnav>
<a href=#home class=active>Home</a>
<a href=#career>Careers</a>
<a href=#fellowship>About Us</a>
<a href=javascript:void(0); class=icon onclick=myFunctionForResponsive()>
<i class=fas fa-bars></i>
</a>
</div>
JavaScript code:
// When the user scrolls the page, execute myFunction
window.onscroll = function() {myFunctionForSticky()};
// Get the navbar
var navbar = document.getElementById(myTopnav);
// Get the offset position of the navbar
var sticky = navbar.offsetTop;
// Add the sticky class to the navbar when you reach its scroll position.
Remove sticky when you leave the scroll position
function myFunctionForSticky() {
if(window.pageYOffset >= sticky){
console.log(window.pageYOffset >= sticky);
}
else{
console.log(Not window.pageYOffset >= sticky);
}
if (window.pageYOffset >= sticky) {
navbar.classList.add(sticky);
} else {
navbar.classList.remove(sticky);
}
}
/*Toggle between adding and removing the responsive class to topnav
when the user clicks on the icon*/
function myFunctionForResponsive() {
var x = document.getElementById(myTopnav);
if (x.className === topnav) {
x.className += responsive;
} else {
x.className = topnav;
}
}
If I am taking class instead of id then it's showing the error:
Uncaught TypeError: Cannot read property 'remove' of undefined