2011-01-22 4 views
4

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

Теперь я хочу, чтобы он остановился, если моя мышка нависала над ним. Как мне это сделать с помощью функции 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); 

ответ

4

Что-то, как это будет работать при условии, interval определяется во внешней области видимости:

$('.slideshow img').hover(function() { 
    interval = clearInterval(interval); 
}, function() { 
    interval = setInterval(flip, 5000); 
}); 
+0

Хорошо, я попробовал, но я не ожидал, что это сработает, потому что мой код не совсем православный ... см. Мое обновленное сообщение о коде, который я использую, чтобы перевернуть изображения ... –

+0

Ok nevermind ... Я получил его на работу ... спасибо за помощь! –

3
(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 s на 1000 s, чтобы быстрее проходить тестирование.

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

+0

Я был * почти * собираюсь указать, что 'interval_function' был глобальным, но затем я увидел запятую из предыдущей строки ... –

+0

спасибо за комментарий ... –

+0

Это помогло так много, спасибо. –