javascript SetTimeout - iç içe setTimeout üzerinde çalışan

2 Cevap php

Tamam, ben bir sorun olması gibi görünüyor. Ben veri satırları görüntülemek için bir twicker oluşturmak çalışıyorum. Ben gizlemek ve belirli bir süre sonra satırları göstermek için jquery / javascript kullanıyorum. İşte kod:

<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>

Şimdi bu işler çoğunlukla, bu satırları gizleme ve doğru olanları gösteren ve çevresinde gayet döngü oluyor. Ben yaşıyorum sorun gizlemek yapıyor ve ardından Show gerçekten çalıştırıyor setTimeout olduğunu. Göstermek ve gizlemek çalışıyor, ama düz bir başka sonra, hiçbir 1s aralarında duraklama olduğunu vardır.

Herkes herhangi bir fikir nedir Buradaki var?

Syn

2 Cevap

bu

            var th1 = setTimeout(function () {hide("twitRow1")},1000);
            var ts1 = setTimeout(function () {show("twitRow2")},1000);

will have them run both after one second. Do you want bu?

            var th1 = setTimeout(function () {
                hide("twitRow1");
                var ts1 = setTimeout(function () {show("twitRow2")},1000);
            },1000);

bu will only start the second timeout when the first runs. Is that it?

Edit: çok gibi basit

            var th1 = setTimeout(function () {hide("twitRow1")},1000);
            var ts1 = setTimeout(function () {show("twitRow2")},2000);

Ben kaptırdım: P

Eğer aynı gecikme onlar neredeyse tam iki ateş olacak aynı zaman iki zaman aşımı yola eğer, Victor hakkıdır. Eğer önceki birini saklıyor bitirdikten hemen sonra bir sonraki div göstermek istiyorsanız, jQuery size tam olarak bunu yapmak için hide method içinde bir geri verir.

Her iki şekilde de, o orada var scripting gerçekten gereksiz miktarda bulunuyor. Bunun yerine gibi bir şey öneririm:

$(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);
};

(Bu arada: o setTimeout bir işlevi değil, bir dize geçmek için genellikle daha iyidir Ayrıca orijinal göstermek / gizlemek fonksiyonları String.Concat bir Java StringBuffer gibi davranır düşünüyor Bu, elde edilecek hiçbir avantaj yoktur etmez.. sadece ing dizeleri birlikte + üzerine bu kullanarak, aslında daha yavaş).