Uncaught TypeError: Cannot read property 'offsetTop' of null

后端 未结 2 1246
小鲜肉
小鲜肉 2021-01-06 17:45

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

相关标签:
2条回答
  • 2021-01-06 17:59

    Code that wants to access the DOM needs to be wrapped in an event listener that listens on DOMContentLoaded.

    Currently you are trying to access the element with the id myTopnav when the browser hasn't parsed the HTML yet, which means your document.getElementById("myTopnav"); returns null. In the next line of code you are trying to read the offsetTop property of the null that your document.getElementById("myTopnav") returned, resulting in Cannot read property 'offsetTop' of null.

    https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded

    document.addEventListener('DOMContentLoaded', function() {
      // When the event DOMContentLoaded occurs, it is safe to access the DOM
    
      // When the user scrolls the page, execute myFunction 
      window.addEventListener('scroll', 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() {
        navbar.classList.toggle('responsive');
      }
    })
    
    0 讨论(0)
  • 2021-01-06 18:08

    some DOM element don't have this 'offsetTop' property check the existence before use. elements have this property

    0 讨论(0)
提交回复
热议问题