diff --git a/public/widget.js b/public/widget.js index 2af4f25..ba0815a 100644 --- a/public/widget.js +++ b/public/widget.js @@ -272,7 +272,7 @@ if (message.senderType === "admin") lastAdminName = message.senderName || "Operator"; else lastAdminName = null; } - messages.scrollTop = messages.scrollHeight; + scrollMessagesToBottom(messages); } function addMessage(messages, sender, senderName, body, attachments, lastAdminName) { @@ -286,7 +286,19 @@ item.className = `mf-message ${sender}`; item.innerHTML = `${body ? `

${escapeHtml(body)}

` : ""}${attachments.map((a) => `${escapeHtml(a.name)}`).join("")}`; messages.append(item); - messages.scrollTop = messages.scrollHeight; + for (const image of item.querySelectorAll("img")) { + image.addEventListener("load", () => scrollMessagesToBottom(messages), { once: true }); + image.addEventListener("error", () => scrollMessagesToBottom(messages), { once: true }); + } + scrollMessagesToBottom(messages); + } + + function scrollMessagesToBottom(messages) { + const scroll = () => { messages.scrollTop = messages.scrollHeight; }; + scroll(); + requestAnimationFrame(scroll); + setTimeout(scroll, 80); + setTimeout(scroll, 240); } function mergeImageFiles(currentFiles, incomingFiles) {