即时聊天软件发消息界面,scrollTo不生效

最近做了个web即时聊天软件,模仿微信的那种,用的是react。

在聊天界面,消息显示我用的是一个数组,里面保存的一条一条消息对象。
每当有新消息发出或者接收的时候,就往数组最后插入,然后在setUseState更新。但是默认情况下有问题,就是消息列表不能自动滚动到最低端,导致画面一直停留在旧消息中。

看到有很多人使用了element.scrollTo=element.scrollHeight这个方法,但是我怎么使用都不生效最后使用scrollIntoView函数解决,这个函数的意思是让某个html元素滚动到能看见的区域。
思路是在插入一个消息之后,就找到这个消息元素,并使用scrollIntoView()方法。注意如果此时消息列表是空的的情况,所以我增加了判断,在多于2条消息的时候才需要滚动。

加了一个settimeout,是因为usestate更新是异步的,所以有可能消息还没插进去,就执行了滚动。

代码如下:

setTimeout(() => {
      let parentElement = document.getElementById( "dialogue-scroll" ) as TMLElement;
      let length = parentElement.children.length 
      if ( length > 2) {
        parentElement.children[length - 1].scrollIntoView(true);
      }
    }, 100);

<div id="dialogue-scroll">
      {messageList.map((item, index) => (<div id="message-item">)}
</div>

参考1 参考2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值