Вопрос

Кажется, у каждого есть проблемы с ClearInterval.Я создал слайдер, который позволяет людям наводить курсор на стрелки.Баннер также вращается каждые несколько секунд.Я хочу иметь возможность отключать автоматический поворот после того, как кто-то нажмет на одну из стрелок.

Вот мой код:

$(function(){
    var intvl = 0;
    intvl = setInterval(heroTransitionNext, 2000);
    $('.rightArrow').click(function(){
       window.clearInterval(intvl);
    });
});

РЕДАКТИРОВАТЬ:

Вот функция, которую он вызывает:

function heroTransitionNext() {
    $('.HP-hero li').filter(':visible').fadeOut('normal', function () {
        if ($(this).next().length != 0) {
            activeZone = parseInt(activeZone) + 1;
            $(this).next().fadeIn('normal', heroNavHighlight(activeZone));
        } else {
            activeZone = 1;
            $('.HP-hero li:first-child').fadeIn('normal', heroNavHighlight(activeZone));
        }
        $(this).hide();
    });
};
Это было полезно?

Решение

Чтобы остановить анимацию, вы можете использовать jquery's .stop() но не уверен, решит ли это проблему, с которой вы столкнулись (не визуализировал), но вы можете попробовать

$('.HP-hero li').stop(1,1); // or try $('.HP-hero li').stop()
window.clearInterval(intvl);

Как say2joe сказал, что clearInterval просто остановит вызов функции в следующий раз, но не очистит текущую очередь (он прав), так что в этом случае stop может быть использован.

О стопе.

Другие советы

В зависимости от того, сколько работы ваша функция herotransitionnext делает, она все равно может быть выполнена, даже если интервал очищен - другими словами, очистка интервала остановит функцию, от которого можно будет, но любой экземпляр функции (ы), выполняющие в памяти, продолжат выполнять до конца.

Быть более понятным, вот кейс использования (вы можете проверить себя самостоятельно, используя профилировщик в инструментах Firebug или Developer):

ErtransitionNext Исполнение времени составляет 2,1 секунды. ClearInterval вызывается через 6,1 секунды после того, как SetInterval вызывается. В 6,1 секунды HertransitionNext был вызовен в четыре раза. Однако первые три казнения выполнили, однако, четвертый не будет завершен до тех пор, пока он не закончит выполнение (в 8,1 секунды с момента вызванного SetInterval). Примечание. В этом случае каждая последовательная призыва будет выполняться, когда последнее выполнение призыва все еще продолжается (на 100 мр. MS) - другими словами, у вас будет выполнение от 2 до 2,1, от 4 до 4,1 и 6 6.1 Вторых интервалов.

Если функция занимает больше времени для выполнения, чем интервал, используйте рекурсивную функцию с SettimeOut (). Следующая ссылка даст вам хороший пример.

Также, хорошая ссылка на объяснение - https://developer.mozilla.org/ en / dom / window.setintererval .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top