【发布时间】:2021-09-18 01:56:44
【问题描述】:
我有以下功能:
<div class="chat-box"></div>
setInterval(() => {
let xhr = new XMLHttpRequest();
xhr.open("POST", "processes/get-chat.php", true);
xhr.onload = ()=> {
if(xhr.readyState === XMLHttpRequest.DONE) {
if(xhr.status === 200) {
let data = xhr.response;
chatBox.innerHTML = data;
// if(!chatBox.classList.contains("active")) {}
}
}
}
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send("incoming_id=" + incoming_id);
}, 500);
if(chatBox.classList.contains("active")) {
$('html,body').animate({scrollTop: document.body.scrollHeight},"fast");
}
我想检查chatbox div 是否有类名active 并自动移动到div 的底部。 active 类是从 setInterval 函数中添加的。但是,我不能在 setInterval 函数中使用 if 条件,因为它将在 n 的时间内执行,然后我将无法向上滚动并阅读内容。它会每隔n 秒将我带到底部。因此,我希望滚动到底部只执行一次。为此,我将它放在setInterval 函数之外。但是,这似乎不起作用。这里可能是什么问题?我怎样才能使这项工作?任何帮助,将不胜感激。谢谢:)
【问题讨论】:
-
我怀疑你的聊天框 div 在调用滚动时是空的。当它在你的 setInterval 方法中时,你以前有这个工作吗?如果是这样并且您只希望它运行一次,那么您不能添加一个设置为 true/false 的全局变量,以便它只滚动一次。之后检查你的变量,看看你是否应该向下滚动。
-
如果您将滚动条移到 setInterval 之外,那么它将运行一次,但它将在 setInterval 运行之前运行,因此在 ajax 请求之前运行,因此在设置类之前运行。
-
@Nathelol 你猜对了。此外,在我自己尝试您的逻辑之前,@ikik 发布了一个与您的逻辑相同的答案。我已经接受了。谢谢:)
-
@freedomn-m 感谢您提供的信息... 教育 :)
标签: javascript jquery if-statement setinterval contains