繁体   English   中英

Next.js Vanilla JS 脚本不会在部署时运行

[英]Next.js Vanilla JS script won't run on deployment

我正在使用 Next.js 构建一个简单的 static 站点。 我拥有的唯一香草 JS 脚本是用于移动菜单 - 将其打开并将 class 添加到正文以防止滚动:

if (process.browser) {
  document.addEventListener('DOMContentLoaded', function() {

    let mainNav = document.querySelector('#menu')
    let navBarToggle = document.querySelector('#toggle')
    let noScroll = document.querySelector('body')

    navBarToggle.addEventListener('click', function () { 
      mainNav.classList.toggle('active')
      navBarToggle.classList.toggle('close')
      noScroll.classList.toggle('lock-scroll')
    })
  })
}

if process.browser语句是我必须添加的,以使其在 localhost 上工作,该语句有效,但仅在第一次加载时有效,例如,当我第一次运行下一个开发时。 在我导航到另一个页面后它不会加载,我猜是因为页面没有被完全重新渲染,脚本需要哪个或什么?

然后,当我部署站点时,切换根本不起作用,即使是在第一次加载时也是如此。

无论如何,非常感谢您对这项工作的任何帮助!

process.browser已被弃用,使用type of window

if (typeof window !== "undefined") {
  document.addEventListener('DOMContentLoaded', function() {

    let mainNav = document.querySelector('#menu')
    let navBarToggle = document.querySelector('#toggle')
    let noScroll = document.querySelector('body')

    navBarToggle.addEventListener('click', function () { 
      mainNav.classList.toggle('active')
      navBarToggle.classList.toggle('close')
      noScroll.classList.toggle('lock-scroll')
    })
  })
}

如果该解决方案不起作用,您可以使用动态导入

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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