我正在尝试实现一个聊天应用程序,更准确地说是为聊天应用程序实现滚动行为。我认为最好用gif图来描述它。 https://i.imgur.com/NnpMeOx.gif 如您所见,我希望支持一些关键功能:
- 滚动是反向的,因此在页面加载时,消息与滚动条一起从底部开始。
- 当用户输入消息时,聊天被滚动到底部。(这很容易,不需要特别注意)
- 如果出现新消息(通过websocket在现实生活中推送),除非已经在底部,否则不应破坏现有的滚动位置。然后它应该自动滚动以显示消息。
到目前为止,我已经实现了两种解决方案:
a) 在可滚动元素上使用显示flex和flex-direction column-reverse。这在chrome上非常好用,但在IE (和Edge)以及firefox上完全忽略。不是一个好的解决方案。
b) 我使用 transform: scaleY(-1) 翻转了容器,然后翻转了每一个消息,同样使用了相同的 transform。主要的明显问题是滚动(鼠标滚轮和箭头)是反向的。我有点修复了它,但是无法实现平滑滚动(很糟糕),而且 Edge(以及可能是 IE)只显示禁用的滚动条。这不是一个好的解决方案。我真的希望能找到能指导我正确方向的人,因为到目前为止,我的努力虽然在逻辑上还可以,但完全失败于浏览器兼容性。
代码在 https://github.com/PeterKottas/react-bell-chat,它是 react 的,但说实话,这似乎更像是一个通用的 web 开发练习。
P.S.:我不能使用 jQuery,希望这是公平的。所以要么使用 css 要么使用纯 javascript。就像我之前说的,这与 react 没有太大关系。