我真的在努力寻找一个干净的解决方案来解决 IOS 设备中的滚动问题。在我的 App.js 中,我只有背景主体和带有一些内容的模式。当显示模态时,我想阻止背景中的滚动(myBodyContent),并且仍然让模态组件中的滚动。我对 javascript 和 React 都很陌生,这对我一点帮助都没有。
我能找到的最干净的解决方案(据我所知)是body-scroll-lock 包,但似乎我无法成功使用它。这是我的代码:
应用程序.js
class App extends Component {
targetRef = React.createRef();
targetElement = null;
constructor(props) {
super(props);
}
componentDidMount() {
this.targetElement = this.targetRef.current;
disableBodyScroll(this.targetElement);
}
render() {
const myModal = (
<Modal ref={this.targetRef}>
// my long content here
</Modal>);
return (
<React.Fragment>
{myModal}
<Layout>
<myBodyContent>
</Layout>
</React.Fragment>
);
}
}
模态.js
class Modal extends Component {
shouldComponentUpdate(nextProps, nextState){
return (nextProps.show !== this.props.show)
}
render () {
return (
<div>
<Auxi>
<Backdrop
show = {this.props.show}
clicked = {this.props.modalClosed}
/>
<div className={style.Modal}
style={{
transform: this.props.show ? 'translateY(0)' : 'translateY(-100vh)', // vh is special unit for outside screen
opacity: this.props.show ? '1': '0'
}}>
{this.props.children}
</div>
</Auxi>
</div>
);
}
}
模态CSS
.Modal {
position: fixed;
z-index: 500;
background-color: white;
width: 80%;
overflow-y: hidden;
overflow: auto;
padding-right: 15px; /* Avoid width reflow */
border: 1px solid #ccc;
box-shadow: 1px 1px 1px black;
padding: 16px;
top: 5%;
left: 5%;
box-sizing: content-box;
transition: all 0.3s ease-out;
}
@media (min-width: 600px) {
.Modal {
width: 80%;
height: 80%;
left: 10%;
top: 10%
}
}
使用上面的代码,一切都被锁定了,我既不能滚动模态也不能滚动 myBodyContent。
你能帮我理解我做错了什么吗?或者建议我用其他方法来达到同样的效果?
在此先感谢您的帮助。