Skip to content

Commit 3f13b51

Browse files
Christopher Straussh908714124
Christopher Strauss
authored andcommitted
#8 besseres scroll Verhalten
1 parent c4a6f68 commit 3f13b51

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

src/main/client/src/feature/game/GameChat.jsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,17 @@ import {
2020
export const GameChat = () => {
2121
let [messages, setMessages] = useState([])
2222
let divRef = useRef()
23-
23+
let messageRef = useRef()
24+
let needsScroll = useRef(false)
2425
let stompClient = useContext(StompContext)
2526
let {gameId} = useParams()
2627
let auth = useAuthStore(state => state.auth)
2728

2829
useEffect(() => {
2930
stompClient.subscribe("/topic/chat/" + gameId, (m) => {
3031
let message = JSON.parse(m.body)
32+
let msg = messageRef.current
33+
needsScroll.current = msg.scrollHeight <= msg.scrollTop + msg.offsetHeight
3134
setMessages(previous => {
3235
if (previous.length && previous[previous.length - 1].n === message.n) {
3336
return previous
@@ -49,7 +52,10 @@ export const GameChat = () => {
4952
}, [stompClient, auth, gameId])
5053

5154
useEffect(() => {
52-
divRef.current?.scrollIntoView({behavior: "smooth"})
55+
if (!needsScroll.current) {
56+
return
57+
}
58+
window.setTimeout(() => divRef.current?.scrollIntoView({behavior: "smooth"}), 0)
5359
}, [messages])
5460

5561
let onSendMessage = useCallback((event) => doTry(async () => {
@@ -66,7 +72,7 @@ export const GameChat = () => {
6672
}), [stompClient, gameId])
6773

6874
return <>
69-
<div
75+
<div ref={messageRef}
7076
className="grow border border-gray-500 bg-gray-900 rounded-lg p-1 overflow-y-scroll">
7177
{messages.map(message => (
7278
<p key={message.n}>{message.user + ": " + message.message}</p>

0 commit comments

Comments
 (0)