Таймеры jQuery портятся после нескольких циклов - PullRequest
1 голос
/ 05 февраля 2010

У меня работает таймер jQuery, и после 2 циклов он, кажется, портится: treethink.treethink.net / backup

Прямо сейчас, на разных таймерах, он уберет тикер новостей и изменит то, что показывает div, а затем снова выведет его. После пары циклов, которые вы можете увидеть в приведенной выше ссылке, некоторые остаются дольше, а затем пересекаются, и это становится беспорядком. Я не уверен, почему это происходит ...

Вот мой код:

/* Retracting Ticker */

    /* Initially hide all news items */

    $('#ticker1').hide();
    $('#ticker2').hide();
    $('#ticker3').hide();

    $("#ticker1").oneTime(1000,function(i) { /* Show 1 once on first pull out */

        $('#ticker1').show();

    });

    $("#ticker1").everyTime(64500,function(i) { /* Hide 3 and show 1 everytime timer gets to certain point */

        $('#ticker1').show();

    });

    $("#ticker1").oneTime(21500,function(i) { /* Hide 1 and show 2 once after first pull out */

        $('#ticker1').hide();
        $('#ticker2').show();

    });

    $("#ticker1").everyTime(86000,function(i) { /* Hide 1 and show 2 everytime timer gets to certain point */

        $('#ticker1').hide();
        $('#ticker2').show();

    });


    $("#ticker2").oneTime(43000,function(i) { /* Hide 2 and show 3 once after second pull out */

        $('#ticker2').hide();
        $('#ticker3').show();

    });

    $("#ticker2").everyTime(107500,function(i) { /* Hide 2 and show 3 everytime timer gets to certain point */

        $('#ticker2').hide();
        $('#ticker3').show();

    });

    $("#ticker3").oneTime(64000,function(i) { /* Hide 2 and show 3 once after second pull out */

        $('#ticker3').hide();

    });

    $("#ticker3").everyTime(129000,function(i) { /* Hide 2 and show 3 everytime timer gets to certain point */

        $('#ticker3').hide();

    });

    $("#ticker").oneTime(2000,function(i) { /* Do the first pull out once */

        $("#ticker").animate({right: "0"}, {duration: 800 });
    });

    $("#ticker").oneTime(20000,function(i) { /* Do the first retract once */

        $("#ticker").animate({right: "-450"}, {duration: 800});

    });

    $("#ticker").everyTime(21500,function(i) { /* Everytime timer gets to certain point */

        $("#ticker").animate({right: "0"}, {duration: 800}); /* Pull out right away */

        $("#ticker").oneTime(20000,function(i) { /* Retract once */

            $("#ticker").animate({right: "-450"}, {duration: 800});

        });

    });

Спасибо

Wade

1 Ответ

2 голосов
/ 06 февраля 2010

Давайте проигнорируем все oneTime с, потому что они не будут вас портить.

$("#ticker1").everyTime(64500,function(i) {
    $('#ticker1').show();
});

$("#ticker1").everyTime(86000,function(i) { 
    $('#ticker1').hide();
    $('#ticker2').show();
});

$("#ticker2").everyTime(107500,function(i) {
    $('#ticker2').hide();
    $('#ticker3').show();
});

$("#ticker3").everyTime(129000,function(i) { 
    $('#ticker3').hide();
});

$("#ticker").everyTime(21500,function(i) { 
    $("#ticker").animate({right: "0"}, {duration: 800});
    $("#ticker").oneTime(20000,function(i) { 
        $("#ticker").animate({right: "-450"}, {duration: 800});
    });
});

У вас есть 4 объекта: тикер, контейнер и 3 сообщения.

Поведение контейнера таково (приблизительно, без учета первого выдвижения): каждые 21,5 секунды прятаться в течение 1,5 секунд и затем выдвигаться обратно. Хорошо, это не источник проблемы, проблема с таймерами 3 сообщений.

Это поведение сообщения в интервалах:

ticker    show (s)   hide (s)
1         64.5       86
2         86         107.5
3         107.5      129

Редактировать У меня были неправильные числа для первого интервала времени тикера, но я все еще думаю, что идея та же. В конце концов, времена перекрываются.

...