JQuery пауза функция при наведении? - PullRequest
4 голосов
/ 22 января 2011

У меня есть функция jQuery / JS, которая использует setInterval для просмотра некоторых слайдов изображений, которые у меня есть.Он просто переворачивается каждые 5 секунд ...

Теперь я хочу сделать паузу, если моя мышь наведена на него.Как мне сделать это с помощью функции setInterval?

var current = 1;

function autoAdvance() {
    if (current == -1) return false;

    jQuery('#slide_menu ul li a').eq(current % jQuery('#slide_menu ul li a').length).trigger('click', [true]);
    current++;
}

// The number of seconds that the slider will auto-advance in:
var changeEvery = jQuery(".interval").val();
if (changeEvery <= 0) {
    changeEvery = 10;
}
var itvl = setInterval(function () {
    autoAdvance()
}, changeEvery * 1000);

Ответы [ 2 ]

4 голосов
/ 22 января 2011

Примерно так будет работать, если предположить, что interval определено во внешней области видимости:

$('.slideshow img').hover(function() {
  interval = clearInterval(interval);
}, function() {
  interval = setInterval(flip, 5000);
});
3 голосов
/ 22 января 2011
(function () {
    var imgs = $('#your_div img'), index = 0, interval,

        interval_function = function () {
            imgs.eq(index).hide();
            index = (index + 1) % imgs.length;
            imgs.eq(index).show();
        };

    imgs.eq(0).show();
    interval = setInterval(interval_function, 5000);

    $('#your_div').hover(function () {
        clearInterval(interval);
    }, function () {
        interval = setInterval(interval_function, 5000);
    });
}());

Пример: http://jsfiddle.net/Zq7KB/3/

Я повторно использовал какой-то старый код, который написал для вопроса на днях, но решил, что это не так уж важно.Хитрость заключается в том, чтобы сохранить ваш интервал в переменной, которую вы храните в фоновом режиме.Затем, когда вы наводите курсор на контейнер, очистите интервал.Когда вы зависаете из контейнера, установите интервал заново.Чтобы лучше понять, как это работает, измените эти 5000 с на 1000 с, чтобы они быстрее проходили тестирование.

Надеюсь, это поможет.

...