先看下效果图吧。
Video_2019-09-26_181137-2.gif主要是今天做了一个需求,打开聊天对话框的时候,滚动条自动滚动到底部,显示最近的聊天记录,本来也是挺简单的一个需求,可以对于一个接触React没多久的小白来说,还是花费了一些时间查找资料。我们是代码的搬运工,哈哈。参考连接也给大家看一下https://stackoverflow.com/questions/37620694/how-to-scroll-to-bottom-in-react
先上代码在简单说两句。
app.js
import React,{Component } from 'react'
import './App.css';
class App extends Component{
scrollToBottom() {
if (this.messagesEnd) {
const scrollHeight = this.messagesEnd.scrollHeight;//里面div的实际高度 2000px
const height = this.messagesEnd.clientHeight; //网页可见高度 200px
const maxScrollTop = scrollHeight - height;
this.messagesEnd.scrollTop = maxScrollTop > 0 ? maxScrollTop : 0;
//如果实际高度大于可见高度,说明是有滚动条的,则直接把网页被卷去的高度设置为两个div的高度差,实际效果就是滚动到底部了。
}
}
render(){
return (
<div className="App">
<button onClick={this.scrollToBottom.bind(this)}>点击这里跳转到底部</button>
<div className='content' ref={(el) => { this.messagesEnd = el; }}>
<div className='content-message'></div>
</div>
</div>
);
}
}
export default App;
app.css
.content{
height:200px;
background-Color:#8a8a8a;
width:500px;
margin:0 auto;
overflow-Y:scroll
}
.content-message{
height:2000px;
background-Color:#8a8b8c;
margin:0 auto
}
这是用create-react-app
新建的一个react项目,把app.js文件改了改。大家如果想看效果,直接新建个react的项目,然后把上面的代码粘过去即可。对了,app.css也修改一下,就两个div,大的套小的,大的高度固定显示滚动条,小的高度调高一点就行了。
react里面显示的是虚拟的dom,所以先用ref获取到当前的dom节点,接下来的思路就是,先判断有没有滚动条,也就是里面div的高度是否超过外面div的高度,如果没有超过,那就不用管嘛,一个页面就显示完了,当然也就不需要滚动,如果里面的div高度比较高,外面的div出现滚动条了,则直接把div的scrollTop
属性设置为两个div的高度差,效果也就是滚动到div的底部了。
scrollTop: 代表在有滚动条时,滚动条向下滚动的距离也就是元素顶部被遮住部分的高度。
网友评论