循环内停顿 3 秒时页面冻结
Page freezes when 3 second pause is inside a loop
当我循环遍历 javascript 中的数组时,我让它在每个项目后暂停 3 秒。它成功地做到了这一点,但它冻结了网页,直到数组完成。
function launchTutorial() {
HideFloatingMenu(); //freezes on page and it doesn't when i comment out the subsequent array loop
//highlightElement("diLeftColumn");
//the classes of each element to highlight in the tutorial
var tutorialClasses = [
"diLeftColumn",
"diMiddleColumn",
"diRightColumn"
];
var threeSec = new Date().getTime() + 3000;
for (var i = 0; i < tutorialClasses.length; i++) {
//$.each(tutorialClasses, function (key, value) {
if (i != 0) {
var now = new Date().getTime();
if (now >= threeSec) {
highlightElement(tutorialClasses[i]);
threeSec = new Date().getTime() + 3000;
}
else {
i = i - 1; //go back to this item if it hasn't been 3 seconds
}
}
else {
highlightElement(tutorialClasses[i]);
threeSec = new Date().getTime() + 3000;
}
}
}
我已经尝试过 setTimeout()、setInterval(0、delay()、2 个不同的自定义睡眠函数和一个 while 循环。none 其中有效。
用这个。在 javascript 中,当您执行一个花费时间 x 的 while 循环时,整个页面会冻结该时间 x。所以使用 while 循环是不可行的。但是您可以像这样使用函数 setTimeout。这将 运行 每 10 秒执行一次 printNextElement 函数(在我的示例中)。
在 console.log 处,按照您的逻辑进行操作。并将 10000 更改为您的时间。
const ar = ['Hello', 'World'];
let index = 0;
const printNextElement = () => {
console.log(ar[index]);
index += 1;
if(ar.length === index) {
return;
}
window.setTimeout(printNextElement, 10000);
};
printNextElement();
当我循环遍历 javascript 中的数组时,我让它在每个项目后暂停 3 秒。它成功地做到了这一点,但它冻结了网页,直到数组完成。
function launchTutorial() {
HideFloatingMenu(); //freezes on page and it doesn't when i comment out the subsequent array loop
//highlightElement("diLeftColumn");
//the classes of each element to highlight in the tutorial
var tutorialClasses = [
"diLeftColumn",
"diMiddleColumn",
"diRightColumn"
];
var threeSec = new Date().getTime() + 3000;
for (var i = 0; i < tutorialClasses.length; i++) {
//$.each(tutorialClasses, function (key, value) {
if (i != 0) {
var now = new Date().getTime();
if (now >= threeSec) {
highlightElement(tutorialClasses[i]);
threeSec = new Date().getTime() + 3000;
}
else {
i = i - 1; //go back to this item if it hasn't been 3 seconds
}
}
else {
highlightElement(tutorialClasses[i]);
threeSec = new Date().getTime() + 3000;
}
}
}
我已经尝试过 setTimeout()、setInterval(0、delay()、2 个不同的自定义睡眠函数和一个 while 循环。none 其中有效。
用这个。在 javascript 中,当您执行一个花费时间 x 的 while 循环时,整个页面会冻结该时间 x。所以使用 while 循环是不可行的。但是您可以像这样使用函数 setTimeout。这将 运行 每 10 秒执行一次 printNextElement 函数(在我的示例中)。
在 console.log 处,按照您的逻辑进行操作。并将 10000 更改为您的时间。
const ar = ['Hello', 'World'];
let index = 0;
const printNextElement = () => {
console.log(ar[index]);
index += 1;
if(ar.length === index) {
return;
}
window.setTimeout(printNextElement, 10000);
};
printNextElement();