【发布时间】:2020-05-01 14:48:09
【问题描述】:
背景
我正在开发一个聊天应用程序,其中我有一个 ul 元素,它使用 li 元素显示消息。 在某些时候,ul 元素会溢出其父元素。
问题
现在,问题是当我切换聊天时。有没有办法让 ul 元素显示溢出的 li 元素,也就是说,显示 ul 元素的最后一个 li 元素,而不是从第一个 li 元素显示,并让用户滚动到底部,因为那样会使糟糕的用户体验。
我尝试使用 scrollIntoView() 方法让 ul 元素在添加新的 li 元素时滚动到最后一条消息,这在用户聊天时工作正常,但一旦用户切换聊天,新聊天的 ul元素明显滚动到其中的最后一个元素。我想从底部显示元素而不滚动 ul 元素。
代码示例
const MessagingScreen = ({ openChat }) => {
const messagesEnd = useRef();
const [message, setMessage] = useState("");
const scrollToBottom = () => {
if (openChat.messages.length > 0) {
messagesEnd.current.scrollIntoView({ behaivor: "smooth", block: "start" });
}
}
useEffect(() => {
scrollToBottom();
}, [openChat.messages])
return (
<main className="flex flex-column flex-grow mh-50">
<ul className="chat-msgs flex-grow w-100 h-100 bg-white overflow-y-scroll instant">
{openChat.messages.map(chatMessageDetails =>
<ChatMessageItem {...chatMessageDetails} key={chatMessageDetails.message}/>)
}
<div ref={messagesEnd}/>
</ul>
</main>
)
}
【问题讨论】:
-
嗨@Bebian,欢迎来到 Stack Overflow。解决方案可能取决于您的
- 元素的上下文。您能否提供一个代码示例来演示您遇到的问题?
-
感谢@totallyuneekname,很高兴来到这里。我现在将在问题的编辑中添加代码示例
标签: javascript html css reactjs