reactjs - 当 div 在 React 中可见时,如何自动滚动到 div?
问题描述
所以,我在 React 中的自动滚动有一个问题,当我的消息可见时,我需要添加自动滚动,当用户提交自己的数据并且一切正常后,一条消息会出现在页面顶部。然后他需要在页面顶部移动,当然,使用自动滚动。
const valMessageRef = useRef<HTMLDivElement | null>(null);
const errorLabelRef = () => scrollToRef(validationMessageRef);
const scrollToRef = (ref: RefObject<HTMLDivElement>) => {
if (ref.current) {
window.scrollTo(0, ref.current.offsetTop);
}
};
useEffect(() => {
errorLabelRef();
}, [validationMessageRef.current]);
return (
<div className="w-100">
{screenType === "success" && (
<div className="ew-form-group_message" ref={validationMessageRef}>
<p className="ew-form-group__val__messages">
<span className="ew-form-group__val__message">{translation.messages.SUCCESS}</span>
</p>
</div>
)}
</div>
....
解决方案
我创建了一个小的 JSFiddle:
https://jsfiddle.net/z64yetpa/5/
class TodoApp extends React.Component {
constructor(props) {
super(props)
this.state = {
showMessage: false
}
this.handleSend = this.handleSend.bind(this);
}
scrollTo() {
window.scrollTo({ left: 0, top: this.myRef.current.offsetTop, behavior: 'smooth' })
}
componentDidMount(){
this.myRef = React.createRef()
}
handleSend(){
this.setState({showMessage:true}, () => this.scrollTo());
}
render() {
const {showMessage} = this.state;
return (
<div className="parent">
{showMessage &&
<div className="upper" ref={this.myRef}>
Hello, scroll to me automatically
</div>
}
<div>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
</div>
<button onClick={this.handleSend}>Send</button>
</div>
)
}
}
ReactDOM.render(<TodoApp />, document.querySelector("#app"))
单击时,您将被重定向到顶部。
推荐阅读
- ios - 在我自己的应用程序停止从 RPScreenRecorder 接收视频缓冲区后,iOS 屏幕录像机显示媒体服务失败错误
- oozie - error=2, oozie 在 hue4.2 中执行 shell 时没有这样的文件或目录
- scala - Scala 集合总和可用于重载加法
- react-apollo - 反应阿波罗突变和乐观更新
- google-cloud-platform - 如何在 Google Cloud Platform 上安装 32bit(x86/i386/i686) ubuntu 16.04?
- .net - 如果我删除 4.6.2 目标开发的“.NET 框架 4.7”
- html - FreeCodeCamp:CSS 样式元素中的错误:“你的 h2 元素应该是蓝色的”
- java - Java - 如何在 barteksc/AndroidPdfViewer 库中制作缩放按钮?
- android - firebase 是否仅限于显示 4kb 文件 JSON 响应?
- java - java中的非Ascii Unicode编码和解码