javascript - 为移动/小屏幕设备禁用 addEventListener

标签 javascript reactjs gatsby

我有一个导航组件,它隐藏了导航项,直到您滚动到视口(viewport)中的某个点。 isTop 查找页面上的位置,一旦到达,导航项就会淡入。在手机或平板电脑菜单上,我希望它们始终可见。

有没有一种方法可以检测用户是否使用较小的屏幕尺寸,如果是,您可以禁用事件监听器吗?

片段:

componentDidMount() {
  this.updateWindowDimensions();
  window.addEventListener('resize', this.updateWindowDimensions);
  document.addEventListener('scroll', () => {
    const isTop = window.scrollY < window.innerHeight - 50;
    if (isTop !== this.state.isTop) {
      this.setState({ isTop })
    }
  });
}
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
  <NavLink className="active" href="/">Home</NavLink>
</NavItem>
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
  <NavLink href="/option">Option</NavLink>
</NavItem>
<NavItem className={this.state.isTop ? 'hide' : 'show fadeIn'}>
  <NavLink href="/option2">Option 2</NavLink>
</NavItem>

最佳答案

我认为您可以使用window.matchMedia来查看窗口是否匹配(或不匹配)特定宽度。以您的情况为例:

const isMobile = !window.matchMedia('仅屏幕和 (min-width: 768px)').matches

如果窗口小于 768px(IE 小于平板电脑),上面的代码将返回 true。

然后,您可以将 isMobile 存储在状态中,并使用它来检查设备是否是移动设备。

关于javascript - 为移动/小屏幕设备禁用 addEventListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56581439/

相关文章:

reactjs - 在 gatsby 的 markdown 中显示图像

graphql - 是什么导致 GraphQL/Gatsby 中的 ["String"has no subfields] 图像错误?

javascript - Laravel -/js/app.js 未找到 404 错误

javascript - 使用 jQuery 快速渲染大型表格

javascript - 点击navlink后刷新内容reactJs

javascript - 如何在对象数组上使用 map

javascript - Reactjs - 父子 Action 和函数

gatsby - 如何使用 NetlifyCMS 和 Gatsby 让 slug 显示在 graphql 中?

javascript - Django:在模板中使用 javascript 在字符串中的逗号后添加空格

javascript - 将 gulp-if 与 gulp-useref 和 gulp-uglify 一起使用