简体   繁体   中英

Prevent scrolling when mobile nav menu is open?

I have a simple nav menu opened from a burger. Whilst this is open how can I prevent all scrolling on the screen? The nav bar is 100vh and I want to prevent scrolling past it whilst it is open?

Js for the nav menu so far (nothing for scrolling)

const navSlide = () => {
    const burger = document.getElementById('burger')
    const nav = document.getElementById('nav')
    const navLinks = document.querySelectorAll('.nav-links li')
    
    burger.addEventListener('click', () => {
        nav.classList.toggle('nav-active')
        navLinks.forEach( (link, index) => {
            if (link.style.animation) {
                link.style.animation = ''
            } else {
                link.style.animation = `navLinkFade 0.7s ease forwards ${index / 7 + 0.4}s`
                }
    })
    burger.classList.toggle('toggle')
  })
}

navSlide()

Add overflow-y: hidden to the body element when the menu is open and remove it when you close the menu.

When opening:

document.body.style.overflowY = 'hidden';

When closing:

document.body.style.overflowY = 'visible';

EDIT:

You can use the above examples like:

document.body.style.overflowY = document.body.style.overflowY === 'hidden' ? 'visible' : 'hidden'; // if current styling is *hidden* then change to visible, otherwise change to hidden

As you are toggling the class for the navbar, I think it would be easier for you to toggle a class for the body element too. So you can add following code to your project:

burger.addEventListener('click', () => {
  document.body.classList.toggle('no-scroll')
  nav.class...
})

And create a CSS class named no-scroll :

.no-scroll {
  overflow-y: hidden;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM