javascript - 当鼠标悬停在一个特定的 div 上时防止页面滚动

标签 javascript html css reactjs

我的问题与此类似 How to prevent page scrolling when scrolling a DIV element?但我想知道是否有一种不需要 jQuery 的 css 和/或 react 方法。

当光标位于某个特定的 div 上时,我想在 mouseWheel 事件上禁用页面滚动。 div 是一个在 mouseWheel 事件上缩放的图形,由 React 组件呈现。

我试过 e.preventDefault 但是 chrome 告诉我

Unable to preventDefault inside passive event listener due to target being treated as passive

有人可以帮忙吗?提前致谢。

编辑:为任何寻找的人找到了一个简单的解决方案。

changeScroll(){ 
    let style = document.body.style.overflow 
    document.body.style.overflow = (style === 'hidden') ? 'auto':'hidden'
} 

<div 
    onMouseEnter={this.changeScroll} 
    onMouseLeave={this.changeScroll} /> 
    <ReactComponent/> 
</div>

最佳答案

谢谢!我一直在寻找管理它的当前答案。

我的 ReactJS 解决方案是在检测到 onMouseEnter/Leave 时添加和删除事件。此外,使用 passive,取自此答案 link .

主成分:

<Wrapper
    onWheel={this.handleScroll}
    onMouseEnter={this.disableScroll}
    onMouseLeave={this.enableScroll}
> ...</Wrapper>

handleScroll():

public handleScroll = (event) => {
    if (event.deltaY > 0) {
      this.decreaseValue()
    } else {
      this.increaseValue()
    }
}

enableScroll():

public enableScroll = () => {
    document.removeEventListener('wheel', this.preventDefault, false)
}

disableScroll():

public disableScroll = () => {
    document.addEventListener('wheel', this.preventDefault, {
      passive: false,
    })
}

preventdefault():

public preventDefault(e: any) {
    e = e || window.event
    if (e.preventDefault) {
      e.preventDefault()
    }
    e.returnValue = false
  }

关于javascript - 当鼠标悬停在一个特定的 div 上时防止页面滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55508836/

相关文章:

javascript - jquery autocomplete 如何设置标签以及如何获取值?

javascript - jQuery Plupload Queue - 如果输入没有文本,则不显示文件浏览器

javascript - 选择单选按钮时删除禁用属性

jquery - 不使用 hide() 和 show() 显示/隐藏

javascript - 使用过滤器返回对象中的属性值

javascript - 使用委托(delegate)单击按钮下载文件 JQuery

javascript - 使用元素创建有针对性的 onclick 事件

html - 无法向我的代码添加 margin-right

javascript - 如何启用显示 :none? 所需的输入

javascript - 电子邮件回复样式覆盖了我的样式