Таймеры JavaScript - очистка, установка новых, циклическое переключение через div - PullRequest
0 голосов
/ 30 июля 2011

У меня есть некоторый JavaScript, который циклически перебирает n тегов div, отображая только по одному за раз, и меняется каждые 10 секунд. Это работает Но у меня также есть следующие и предыдущие кнопки. Кажется, они пропускают один дел, когда я нажимаю следующий или предыдущий.

Может кто-нибудь помочь?

Любые предложения о лучшем способе сделать это также приветствуются. Я новичок в jQuery, поэтому я знаю некоторые улучшения, которые я хотел бы сделать в любом случае. Спасибо !!!

jQuery(document).ready(function () {
    var counter = 1;
    var delay = 3000; //10 seconds = 10000
    var lastItem = jQuery('table[id^=featuredNo]').length - 1;
    var previous = 0;
    var timerID;

    //argument is increment
    //false is decrement
    function updateCounter(increment) {
        if (increment) {
            counter = (counter >= lastItem) ? 0 : counter + 1;
            previous = (previous >= lastItem) ? 0 : previous + 1;
        } else {
            counter = (counter <= 0) ? lastItem : counter - 1;
            previous = (previous <= 0) ? lastItem : previous - 1;
        }
    }

    function displayNext() {
        //alert("testt" + counter);

        //hide everything but current
        jQuery("table[id^=featuredNo]").hide();
        jQuery("#featuredNo" + counter).show();

        //incrememnt the counter, so next time we show the next one
        updateCounter(true);
    };

    //set click handlers for previous
    jQuery('a[id^=featuredPrevious]').click(function () {
        clearInterval(timerID);

        updateCounter(false);

        displayNext();
        timerID = setInterval(displayNext, delay);
    });

    //set click handlers for next
    jQuery('a[id^=featuredNext]').click(function () {
        clearInterval(timerID);

        updateCounter(true);

        displayNext();
        timerID = setInterval(displayNext, delay);
    });


    //start interval
    timerID = setInterval(displayNext, delay);
});

1 Ответ

1 голос
/ 30 июля 2011

Самое простое решение удаляет updateCounter (true) из вашего следующего обработчика кнопки и добавляет еще одно updateCounter (false) в ваш обработчик кнопки prev:

//set click handlers for previous
jQuery('a[id^=featuredPrevious]').click(function () {
    clearInterval(timerID);

    updateCounter(false);
    updateCounter(false);

    displayNext();
    timerID = setInterval(displayNext, delay);
});

//set click handlers for next
jQuery('a[id^=featuredNext]').click(function () {
    clearInterval(timerID);

    displayNext();
    timerID = setInterval(displayNext, delay);
});
...