我正在尝试编写代码来向下滚动网站上的div。 div有一个当你滚动到底部时会自动加载的内容。我通过添加一个带有自身链接的元素,点击它,删除它,然后重新添加(到新的底部)来实现这一点。我的代码看起来像这样:
function showWholeDiv() {
clearTimeout();
console.log("Running:");
let contents;
let myDiv = document.getElementsByClassName("{classname}")[0];
contents = myDiv.children;
let elem = document.createElement("a");
elem.id = "scroll-here";
elem.href = "#scroll-here";
myDiv.appendChild(elem);
scrollDiv(myDiv, elem, 10);
};
function scrollDiv(div, scrollElem, scrolls) {
clearTimeout();
if (scrolls > 0) {
console.log("scrolling...");
div.appendChild(scrollElem);
document.getElementById("scroll-here").click();
scrollElem.remove();
setTimeout(scrollDiv(div, scrollElem, scrolls - 1), 100);
} else {
console.log(div);
}
};
它适用于一个滚动,但后来我得到这个奇怪的消息,它一次又一次地输出“滚动...”而没有延迟:
scrolling...
680a7736f556.js:44 [Violation] 'setTimeout' handler took 179ms
contentScript.js:34 scrolling...
680a7736f556.js:44 [Violation] 'setTimeout' handler took 143ms
contentScript.js:34 scrolling...
680a7736f556.js:44 [Violation] 'setTimeout' handler took 162ms
contentScript.js:34 scrolling...
680a7736f556.js:44 [Violation] 'setTimeout' handler took 154ms
contentScript.js:40 <div class="PZuss">…</div>
我添加了clearTimeouts以查看是否存在问题,但它没有帮助。这里发生了什么?有没有关于setTimeout的事我误解了?
正在立即评估scrollDiv函数。
解决这个问题的一种方法是将其包装在一个闭包中
setTimeout(function(){scrollDiv(div,scrollElem,scrolls - 1}),100);