gpt4 book ai didi

reactjs - react JS : onWheel bubbling stopPropagation not working

转载 作者:行者123 更新时间:2023-12-04 00:11:14 38 4
gpt4 key购买 nike

TL;DR:

查看我的 jsfiddle 链接,其中向上滚动子 div 直到底部/顶部不应开始滚动父级。我尝试使用 e.stopPropagation()这没有用。所以需要解决方案(不使用 mixins)。

My Code:

http://jsfiddle.net/vmvrphjn/

//////////HTML CODE
<script src="https://facebook.github.io/react/js/jsfiddle-integration-babel.js"></script>
<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>

////////CSS CODE
.childScroll{
max-height: 200px;
overflow-y: scroll;
background-color: white;
max-width: 200px;
margin: 0 auto;
border: 1px solid blue
}

.parentScroll {
text-align: center;
max-height: 300px;
overflow-y: scroll;
background-color: lightgreen;
padding: 10px;
}

////////JS CODE
class Hello extends React.Component {
render() {

return (
<div className='parentScroll'>
Scrollable Parent: <br /><br />
<div className='childScroll' onWheel = {(e)=>{console.log('Scrolling Me..'); e.stopPropagation();}}>
Scroll CHILD LIST:1 <br /><br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
Some text blah<br />
</div>
<div className='childScroll' onWheel = {(e)=>{console.log('Parent got scroll event');}}>
Scroll CHILD LIST:2 <br /><br />
Hi text blah<br />
Hi text blah<br />
Hi text blah<br />
Hi text blah<br />
Hi text blah<br />
Hi text blah<br />
Hi text blah<br />
Hi text blah<br />
Hi text blah<br />
Hi text blah<br />
</div>
</div>
);
}
}

ReactDOM.render(
<Hello name="World" />,
document.getElementById('container')
);

My Target:

我有一个滚动的 div。但是在滚动 div 之后到达顶部或底部时,滚动开始发生在我不想要的整个页面本身上。我认为这是由于事件传播而发生的,所以我试图以以下方式停止。

My Implementation:

我正在使用“扩展组件(es6 方式)”来创建我的组件。我已经将 onWheel 事件监听器设置为

它很好地安慰了“滚动我”,但我无法停止将此事件传播给父级。不确定为什么 stopPropagation 没有准确发生,或者这个问题是否因为传播而发生

我不想使用使用了 mixins 的库,所以请不要这样建议我。

最佳答案

我使用以下方法解决了这个问题。

早期解决方案:

const rdom = require('react-dom');  

<div onMouseOver={() => {
const ele = rdom.findDOMNode(this);
if (ele.scrollTop === 0 && ele.scrollHeight === ele.clientHeight) {
return;
} else {
document.body.style.overflow = 'hidden';
}
}}
onMouseOut={() => {
document.body.style.overflow = 'auto';
}}
</div>

新解决方案:(由于 Mac 和 Linux 操作滚动条的方式与 Windows 不同,上述解决方案很烦人,因为它会在文档中删除和添加滚动条,从而减少/增加其宽度,这会影响其他元素)

handleScroll(e) {

const ele = rdom.findDOMNode(this);

if (e.nativeEvent.deltaY <= 0) {
/* scrolling up */
if(ele.scrollTop <= 0) {e.preventDefault();}
}
else
{
/* scrolling down */
if(ele.scrollTop + ele.clientHeight >= ele.scrollHeight) {
e.preventDefault();
}
}


/*Look question for the placement of below CODE*/
onWheel={(e) => {this.handleScroll(e);}}

另一个解决方案:

您还可以找到 if document/window/body has been scrolled uptil your scrollable div。然后将这个可滚动的 div 设为 position: fixed。固定属性自动不让文档/窗口/主体获取 onWheel 事件。

关于reactjs - react JS : onWheel bubbling stopPropagation not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34790949/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com