Javascript 检查 class 名称是否已添加到 DIV 并执行任务
Javascript check if a class name has been added to DIV and perform task
我有以下功能:
<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 是否有 class 名称 active
并自动移动到 div 的底部。 active
class 是从 setInterval
函数添加的。但是,我不能在 setInterval
函数中使用 if 条件,因为它会在 n
时间内执行,然后我将无法向上滚动并阅读内容。它会每隔 n
秒将我带到底部。因此,我希望滚动到底部只执行一次。为此,我将它放在 setInterval
函数之外。但是,这似乎不起作用。这可能是什么问题?我怎样才能使这项工作?任何帮助,将不胜感激。谢谢:)
这种事情可以通过添加额外的逻辑和计数器轻松完成。
你定义了外部变量let count = 0;
然后在区间内每次加1。然后将此添加到您的 if 中,以便在计数为 1 时仅反应一次。
++count
if (chatBox.classList.contains("active") && count === 1) {
< div class = "chat-box" > < /div>
let count = 0;
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;
++count
if (chatBox.classList.contains("active") && count === 1) {
$('html,body').animate({
scrollTop: document.body.scrollHeight
}, "fast");
}
}
}
}
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send("incoming_id=" + incoming_id);
}, 500);
或真假逻辑,你明白了:
< div class = "chat-box" > < /div>
let count = true;
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") && count === true) {
count = false;
$('html,body').animate({
scrollTop: document.body.scrollHeight
}, "fast");
}
}
}
}
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send("incoming_id=" + incoming_id);
}, 500);
我有以下功能:
<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 是否有 class 名称 active
并自动移动到 div 的底部。 active
class 是从 setInterval
函数添加的。但是,我不能在 setInterval
函数中使用 if 条件,因为它会在 n
时间内执行,然后我将无法向上滚动并阅读内容。它会每隔 n
秒将我带到底部。因此,我希望滚动到底部只执行一次。为此,我将它放在 setInterval
函数之外。但是,这似乎不起作用。这可能是什么问题?我怎样才能使这项工作?任何帮助,将不胜感激。谢谢:)
这种事情可以通过添加额外的逻辑和计数器轻松完成。
你定义了外部变量let count = 0;
然后在区间内每次加1。然后将此添加到您的 if 中,以便在计数为 1 时仅反应一次。
++count
if (chatBox.classList.contains("active") && count === 1) {
< div class = "chat-box" > < /div>
let count = 0;
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;
++count
if (chatBox.classList.contains("active") && count === 1) {
$('html,body').animate({
scrollTop: document.body.scrollHeight
}, "fast");
}
}
}
}
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send("incoming_id=" + incoming_id);
}, 500);
或真假逻辑,你明白了:
< div class = "chat-box" > < /div>
let count = true;
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") && count === true) {
count = false;
$('html,body').animate({
scrollTop: document.body.scrollHeight
}, "fast");
}
}
}
}
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send("incoming_id=" + incoming_id);
}, 500);