重置 jQuery 轮播中的计时器
Resetting the timer in a jQuery carousel
我有一个工作正常的旋转木马,我遇到的唯一问题是当我单击控件时计时器不会停止。我有一个循环,它位于更改图像的计时器内。
当我点击控件时,我可以更改我当前的活动轮播图像,但计时器不会重置。
这是我的 jQuery:
$(document).ready(function () {
var $slider = $('.slider');
var $slide = 'li';
var $transition_time = 2000;
var $time_between_slides = 5000;
var $btn = $('.buttons');
var $buttonanchor = 'li';
function slides() {
return $slider.find($slide);
}
slides().fadeOut();
slides().first().addClass('active');
slides().first().fadeIn($transition_time);
function button() {
return $btn.find($buttonanchor);
}
button().first().addClass('btnactive');
$interval = setInterval(
function () {
var $i = $slider.find($slide + '.active').index();
slides().eq($i).removeClass('active');
button().eq($i).removeClass('btnactive');
button().eq($i).addClass('buttonsnotactive');
slides().eq($i).fadeOut($transition_time);
if (slides().length == $i + 1) $i = -1; // loop to start
slides().eq($i + 1).fadeIn($transition_time);
slides().eq($i + 1).addClass('active');
button().eq($i + 1).addClass('btnactive');
}, $transition_time + $time_between_slides);
$('.buttons li').click(function (event) {
var $i = $(this).index();
$('.buttons li').removeClass('btnactive');
$(this).addClass('btnactive');
$('.slider li').fadeOut($transition_time);
$('.slider li').removeClass('active');
$('.slider li').eq($i).fadeIn($transition_time);
$('.slider li').eq($i).addClass('active');
event.preventDefault();
});
});
这是我的 jsFiddle 了解更多信息。
1) 在使用前先定义您的 $interval
变量。
2) 在设置之前清除任何以前的间隔。
3) 清除控件被点击的时间间隔
// ....
// ....
button().first().addClass('btnactive');
// -- Added --
var $interval = 0;
clearInterval($interval);
// -- ; --
$interval = setInterval(
// ....
点击功能内
$('.buttons li').click(function (event) {
// Added
clearInterval($interval);
// --; --
这就是您重置计时器的方式。但是,您可能需要一个选项(例如播放按钮)来重新激活计时器,以防您想再次启动自动播放。因此,最好将您的代码从区间内移动到一个函数中,并在需要时调用它,如下所示。
// ...
// ...
button().first().addClass('btnactive');
var slideMe = function() {
var $i = $slider.find($slide + '.active').index();
slides().eq($i).removeClass('active');
button().eq($i).removeClass('btnactive');
button().eq($i).addClass('buttonsnotactive');
slides().eq($i).fadeOut($transition_time);
if (slides().length == $i + 1) $i = -1; // loop to start
slides().eq($i + 1).fadeIn($transition_time);
slides().eq($i + 1).addClass('active');
button().eq($i + 1).addClass('btnactive');
};
// -- Added --
var $interval = 0;
clearInterval($interval);
// -- ; --
$interval = setInterval(slideMe, $transition_time + $time_between_slides);
// ...
// ...
演示@Fiddle
所以,这是一个带有播放按钮的脏版本,点击它会重新激活自动播放。 code/demo.
取一个look at this fiddle
我有一个工作正常的旋转木马,我遇到的唯一问题是当我单击控件时计时器不会停止。我有一个循环,它位于更改图像的计时器内。 当我点击控件时,我可以更改我当前的活动轮播图像,但计时器不会重置。
这是我的 jQuery:
$(document).ready(function () {
var $slider = $('.slider');
var $slide = 'li';
var $transition_time = 2000;
var $time_between_slides = 5000;
var $btn = $('.buttons');
var $buttonanchor = 'li';
function slides() {
return $slider.find($slide);
}
slides().fadeOut();
slides().first().addClass('active');
slides().first().fadeIn($transition_time);
function button() {
return $btn.find($buttonanchor);
}
button().first().addClass('btnactive');
$interval = setInterval(
function () {
var $i = $slider.find($slide + '.active').index();
slides().eq($i).removeClass('active');
button().eq($i).removeClass('btnactive');
button().eq($i).addClass('buttonsnotactive');
slides().eq($i).fadeOut($transition_time);
if (slides().length == $i + 1) $i = -1; // loop to start
slides().eq($i + 1).fadeIn($transition_time);
slides().eq($i + 1).addClass('active');
button().eq($i + 1).addClass('btnactive');
}, $transition_time + $time_between_slides);
$('.buttons li').click(function (event) {
var $i = $(this).index();
$('.buttons li').removeClass('btnactive');
$(this).addClass('btnactive');
$('.slider li').fadeOut($transition_time);
$('.slider li').removeClass('active');
$('.slider li').eq($i).fadeIn($transition_time);
$('.slider li').eq($i).addClass('active');
event.preventDefault();
});
});
这是我的 jsFiddle 了解更多信息。
1) 在使用前先定义您的 $interval
变量。
2) 在设置之前清除任何以前的间隔。
3) 清除控件被点击的时间间隔
// ....
// ....
button().first().addClass('btnactive');
// -- Added --
var $interval = 0;
clearInterval($interval);
// -- ; --
$interval = setInterval(
// ....
点击功能内
$('.buttons li').click(function (event) {
// Added
clearInterval($interval);
// --; --
这就是您重置计时器的方式。但是,您可能需要一个选项(例如播放按钮)来重新激活计时器,以防您想再次启动自动播放。因此,最好将您的代码从区间内移动到一个函数中,并在需要时调用它,如下所示。
// ...
// ...
button().first().addClass('btnactive');
var slideMe = function() {
var $i = $slider.find($slide + '.active').index();
slides().eq($i).removeClass('active');
button().eq($i).removeClass('btnactive');
button().eq($i).addClass('buttonsnotactive');
slides().eq($i).fadeOut($transition_time);
if (slides().length == $i + 1) $i = -1; // loop to start
slides().eq($i + 1).fadeIn($transition_time);
slides().eq($i + 1).addClass('active');
button().eq($i + 1).addClass('btnactive');
};
// -- Added --
var $interval = 0;
clearInterval($interval);
// -- ; --
$interval = setInterval(slideMe, $transition_time + $time_between_slides);
// ...
// ...
演示@Fiddle
所以,这是一个带有播放按钮的脏版本,点击它会重新激活自动播放。 code/demo.
取一个look at this fiddle