gpt4 book ai didi

php - javascript setTimeOut - 不在嵌套的 setTimeout 上运行

转载 作者:行者123 更新时间:2023-11-30 23:50:35 27 4
gpt4 key购买 nike

好吧,我好像遇到了问题。我正在尝试创建一个twicker 来显示数据行。我正在使用 jquery/javascript 在一定时间后隐藏和显示行。代码如下:

<html>
<head>
<script type="text/javascript" src="jquery-1.3.2.js"></script>
</head>
<body>


<script>
var timer_is_on=0;

function doTimer()
{
if (!timer_is_on)
{
timer_is_on=1;
t=setTimeout("timedCount()",5000);
}
}

function hide(hideMe) {
var elem='';
elem = elem.concat("#").concat(hideMe);
$(elem).filter(":visible").hide("slow");
}

function show(showMe) {
var elem='';
elem = elem.concat("#").concat(showMe);
$(elem).show("slow");
}

function timedCount() {
$(document).ready(function() {
if( $("#twitRow1").is(":visible")){
var th1 = setTimeout(function () {hide("twitRow1")},1000);
var ts1 = setTimeout(function () {show("twitRow2")},1000);
} else if( $("#twitRow2").is(":visible")){
var th2 = setTimeout(function () {hide("twitRow2")},1000);
var ts2 = setTimeout(function () {show("twitRow3")},1000);
} else if( $("#twitRow3").is(":visible")){
var th3 = setTimeout(function () {hide("twitRow3")},1000);
var ts3 = setTimeout(function () {show("twitRow4")},1000);
} else if( $("#twitRow4").is(":visible")){
var th4 = setTimeout(function () {hide("twitRow4")},1000);
var ts4 = setTimeout(function () {show("twitRow5")},1000);
} else if( $("#twitRow5").is(":visible")){
var th5 = setTimeout(function () {hide("twitRow5")},1000);
var ts5 = setTimeout(function () {show("twitRow6")},1000);
} else if( $("#twitRow6").is(":visible")){
var th6 = setTimeout(function () {hide("twitRow6")},1000);
var ts6 = setTimeout(function () {show("twitRow7")},1000);
} else if( $("#twitRow7").is(":visible")){
var th7 = setTimeout(function () {hide("twitRow7")},1000);
var ts7 = setTimeout(function () {show("twitRow8")},1000);
} else if( $("#twitRow8").is(":visible")){
var th8 = setTimeout(function () {hide("twitRow8")},1000);
var ts8 = setTimeout(function () {show("twitRow9")},1000);
} else if( $("#twitRow9").is(":visible")){
var th9 = setTimeout(function () {hide("twitRow9")},1000);
var ts9 = setTimeout(function () {show("twitRow1")},1000);
}
});
t=setTimeout("timedCount()",5000);
}

</script>

<div id="myDivTable">

<div id="twitRow1">Row 1</div>
<div id="twitRow2" style="display: none;">Row 2</div>
<div id="twitRow3" style="display: none;">Row 3</div>
<div id="twitRow4" style="display: none;">Row 4</div>
<div id="twitRow5" style="display: none;">Row 5</div>
<div id="twitRow6" style="display: none;">Row 6</div>
<div id="twitRow7" style="display: none;">Row 7</div>
<div id="twitRow8" style="display: none;">Row 8</div>
<div id="twitRow9" style="display: none;">Row 9</div>
</div>
<script>
doTimer();
</script>
</body>
</html>

现在,在大多数情况下,它都可以工作,它会隐藏行并显示正确的行,然后很好地循环。我遇到的问题是执行隐藏然后显示的 setTimeout 实际上并未运行。显示和隐藏正在运行,但紧接着一个接着一个,它们之间没有 1 秒的停顿。

有人知道这里发生了什么吗?

同步

最佳答案

Victor 是对的,如果您以相同的延迟设置两个超时,它们几乎会在同一时间触发。如果您想在隐藏完前一个 div 后立即显示下一个 div,jQuery 会在 hide method 中为您提供回调。正是为了做到这一点。

无论哪种方式,您都需要编写大量不必要的脚本。我建议改为:

$(document).ready(function() {
var rows= $('#myDivTable>div');
var rowi= 0;
rows[rowi].show();

setInterval(function() {
rows[rowi].hide('slow', function() {
rowi= (rowi+1)%rows.length;
rows[rowi].show('slow');
});
}, 5000);
};

(顺便说一句:通常最好将函数传递给 setTimeout,而不是字符串。另外,您原来的显示/隐藏函数似乎认为 String.concat 的行为类似于 Java StringBuffer。事实并非如此,没有任何优势通过使用这个而不是仅将字符串+ing在一起来获得;事实上它更慢。)

关于php - javascript setTimeOut - 不在嵌套的 setTimeout 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1612662/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com