我正在使用此脚本替换页面上的某些文字。
function initChangeText() {
var time = 2;
setInterval('changeText();', time * 1000);
}
function changeText() {
var divs_ = document.getElementsByTagName("div")
for (var i = 0; i < divs_.length; i++)
if (divs_[i].className == "change")
changeULText(divs_[i]);
}
function changeULText(obj) {
var ul = obj.getElementsByTagName("ul")[0];
var li = obj.getElementsByTagName("li");
for (var i = 0; i < li.length; i++) {
if (li[i].className == "show") {
li[i].className = "";
li[(i + 1) % li.length].className = "show";
return;
}
}
}
window.onload = initChangeText;
问题是这个脚本是自己循环的。而且我不想要它。我希望它执行一次然后停止。
我该怎么做?
答案 0 :(得分:3)
此:
function initChangeText() {
var time = 2;
setInterval('changeText();', time * 1000);
}
每秒调用一次脚本。删除该功能并将window.onload = initChangeText;
更改为window.onload = changeText;
答案 1 :(得分:1)
正如Crayon Violent在评论中所说,您应该使用setTimeout
代替setInterval
。
来自Mozilla开发者网络:
setTimeout
:
在计时器到期后设置一个计时器执行一个函数或指定的代码一次。
setInterval
:
反复调用函数或执行代码段,每次调用之间有固定的时间延迟。返回intervalID。
您也可以在一段时间后或使用计数器进行多次循环后清除setInterval
。
经过一段时间后
假设您要执行3000 ms的循环。然后你可以这样做:
function initChangeText() {
var time = 2;
// Store the id to be able to clear it
var intervalId = setInterval('changeText();', time * 1000);
// Clear the interval 3000 ms after the interval started
setTimeout(function() {window.clearInterval(intervalId);}, time * 1000 + 3000);
}
function changeText() {
// remains the same
}
function changeULText(obj) {
// remains the same
}
window.onload = initChangeText;
经过多次循环后
假设你想要执行你的循环6次。你可以这样做:
var loopCount = 0; // Initialize a global counter
var intervalId; // Store the ID in the global scope
function initChangeText() {
var time = 2;
intervalId = setInterval('changeText();', time * 1000); // Stores the ID
}
function changeText() {
// Add an if statement to clear the intervalId when
// the loopCount reaches the limit of 6 repetitions
if(++loopCount >= 6 && intervalId) {
window.clearInterval(intervalId);
}
// rest of the function remains the same
}
function changeULText(obj) {
// remains the same
}
window.onload = initChangeText;
答案 2 :(得分:0)
window.onload = changeText;
或者,如果你想保持初始超时:
将setInterval
替换为setTimeout
。