我已经有一个关于这个的 stackoverflow 问题,但答案不够恰当,这次我想以不同的方式解释更多关于不同产品的信息。
首先,应该如何加载 AJAX 聊天消息?
- 我是否需要每隔几毫秒发送一个 AJAX 请求以检查是否有新消息,然后使用时间戳加载新消息(如果存在)?还是我只需要每隔几毫秒重新加载所有消息并用新消息列表替换 div ?
问题
好的,我的聊天当前每 5,000 毫秒加载一次所有消息。因此,当发布新消息并重新加载聊天时,滚动条将保持在同一位置,并且一条新消息将出现在下方。
如您所见,在stackoverflow聊天中,它以某种方式自动上升,当出现新消息时,不知何故,一条新消息在聊天底部滑动,而旧消息只是在其上方没有任何滚动,但滚动变大&我可以向上滚动查看旧消息。
肮脏的解决方案1:在重新加载时让滚动向下滚动到底部,这真的很烦人。
最终解决方案:检查用户的滚动条是否位于底部,如果是,则加载新消息并立即向下滚动。如果滚动条不在聊天底部,则聊天不会向下滚动。
但是这些解决方案非常糟糕,我想做一些像 stackoverflow 聊天那样的事情,它完美地滑动新消息,没有任何滚动。
这个问题有有效的解决方案吗?我想我不是唯一遇到这个问题的人。