【发布时间】:2016-03-16 18:11:06
【问题描述】:
这是一个示例聊天应用程序 ->
这里的想法是让.messages-container 尽可能多地占据屏幕。在.messages-container 内,.scroll 保存消息列表,如果消息多于屏幕大小,则滚动。
现在,考虑这种情况:
- 用户滚动到对话底部
-
.text-input,动态变大
现在,用户不是一直滚动到对话的底部,而是文本输入增加,他们不再看到底部。
一种解决方法,如果我们使用 react,计算 text-input 的高度,如果有任何变化,让 .messages-container 知道
componentDidUpdate() {
window.setTimeout(_ => {
const newHeight = this.calcHeight();
if (newHeight !== this._oldHeight) {
this.props.onResize();
}
this._oldHeight = newHeight;
});
}
但是,这会导致明显的性能问题,而且像这样传递消息是可悲的。
有没有更好的方法?我可以以这种方式使用 css 来表达当 .text-input-increases 时,我想基本上 shift up all of .messages-container
【问题讨论】:
-
请详细说明用于增加文本输入的 css/js。
-
您能否发fiddle 以更好地阐述您的问题?
-
关于调整输入文本的大小,请问为什么用户应该能够这样做? ... 大多数聊天应用程序不这样做,如果他们这样做,它们不会在用户调整大小时加强消息,以便用户意识到这种行为(例如 Skype)。
-
@stepan:为什么要调整文本输入的大小?
-
我们在工作中使用的聊天应用程序确实允许调整输入框的大小,这是一个非常方便的功能(它不会让对话一直滚动到底部,但如果它会很好做过)。通常,我将其调整为只有一两行,以便我可以看到更多的对话,但有时我需要制作更长的 cmets,其中可能包括复制/粘贴的内容、代码 sn-ps 甚至项目符号列表。在这些情况下,我希望能够在发送之前看到我的全部评论。
标签: javascript css reactjs flexbox