#jquery #slider #setinterval #clearinterval
#jquery #ползунок #setinterval #очистить интервал
Вопрос:
Я работаю над сценарием автоматической прокрутки, я использую функцию в jquery для перехода к выбранному элементу в меню. И я использую setInterval для щелчка по каждому пункту меню. Пока все работает нормально. Но проблема возникает, когда мне нужно остановить setInterval, я имею в виду, остановить setInterval, если пользователь нажимает на один из элементов.
У меня есть две проблемы или вопросы к вам:
- Это правильный способ выполнить автоматическую прокрутку?
- Если это не так, я был бы очень признателен, если бы вы дали мне небольшую подсказку, как это сделать. Если это правильный способ, как узнать, было ли событие щелчка вызвано пользователем или сценарием?
Хорошо. Спасибо за чтение. Код, который я использую, является следующим и, как я уже сказал, работает нормально, чтобы зациклить ползунок. БОЛЬШОЕ СПАСИБО. Просто в качестве примечания: для петиции клиента я не могу использовать плагин jquery для создания слайдера, поэтому мне приходится делать это вручную.
$('.slider-controls a').live('click',function(e){
moveSlider($(this).attr('href'),e);
return false;
});
function moveSlider(toDiv,elem){
var nextPos = $(toDiv).position().top;
$('.slider-total').animate({
top: -nextPos
}, 700);
$('.slider-total div').removeClass('activo');
$(toDiv).addClass('activo');
}
var autoSlider = setInterval(function(){
var slideNext;
if ( !($('.slider-total .activo').next().attr('id')) ){
slideNext = '#' $('.slider-total .post:first').attr('id');
} else {
slideNext = '#' $('.slider-total .activo').next().attr('id');
}
$('a[href=' slideNext ']').click();
},4000);
Ответ №1:
Вы можете очистить интервал, вызвав clearInterval()
передачу идентификатора интервала, возвращаемого из setInterval()
функции. В вашем случае это будет:
clearInterval(autoSlider);
Комментарии:
1. ДА. Я знаю, что это фактически останавливает мой setInterval. Что мне нужно, так это остановить setInterval, когда пользователь нажимает на элемент. Я мог бы использовать clearInterval(autoSlider) в $(‘.slider-управляет’).live(‘click’); функция. Проблема здесь в том, что сами скрипты нажимают на каждый элемент, поэтому, если я использую его таким образом, ползунок анимируется только для второго элемента.
2. Непосредственно внутри вашего
setInterval
вызова функцииmoveSlider
. Затем вы можете очистить время ожидания вclick
событии, поскольку оно будет исходить от пользователя. Всегда пытайтесь извлечь свою логику для разделения методов, которые вы можете вызывать из событий или вашего javascript, не «притворяясь» пользователем