我写了一段代码:
var timer = 0;
$('.tour-slider').on('click', 'li a', function(e){
e.preventDefault();
$(this).closest('.slider').hide();
var sliderHref = $(this).attr('href');
$(sliderHref).fadeIn();
if(sliderHref == '#slider-1'){
anim1.pause();
anim2.pause();
anim3.pause();
anim1.start();
}else if(sliderHref == '#slider-2'){
anim1.pause();
anim2.pause();
anim3.pause();
anim2.start();
}else if(sliderHref == '#slider-3'){
anim1.pause();
anim2.pause();
anim3.pause();
anim3.start();
}
});
function slideshow(){
$('#slider-1').siblings().hide();
anim1.start();
timer = setInterval(function(){
$('.slider:visible .active').next('li').find('a').trigger('click');
$('.helper').first().removeClass('helper');
if (!$('#slider-3').hasClass('helper')) {
$('#slider-1, #slider-2, #slider-3').addClass('helper');
$('#slider-1 .active').find('a').trigger('click');
$('#slider-3').hide();
}
}, 10000);
}如您所见,这是用setInterval创建的无穷大循环中的基本幻灯片。
但是现在,我必须添加一些功能-如果用户单击'a‘元素,那么setInterval计时器应该重新启动。
现在,幻灯片每10秒改变一次(#滑块-1,#滑块-2,#滑块-3)。但是当用户单击另一个“a”(例如4秒后)时,滑块将发生变化,6秒后再次自动更改。
现在:(#滑块-1显示>用户点击'a‘后4秒>#滑块-2显示>6秒后#滑块-3显示)
希望:(#滑块-1显示>用户单击'a‘后4秒>#滑块-2显示>10秒后#滑块-3显示)
我知道,我得用clearInterval,是吗?但我不知道如何在我的情况下使用它。
HTML标记:
<div id="slider-1" class="slider helper">
<div id="animation-1">
</div> <!-- end animation-1 -->
<div class="tour-slider-content">
<ul>
<li class="active"><a href="#slider-1"></a></li>
<li><a href="#slider-2"></a></li>
<li><a href="#slider-3"></a></li>
</ul>
</div> <!-- end slider content class -->
</div> <!-- end slider 1 -->
<div id="slider-2" class="slider helper">
<div id="animation-2">
</div> <!-- end animation-2 -->
<div class="tour-slider-content">
<ul>
<li><a href="#slider-1"></a></li>
<li class="active"><a href="#slider-2"></a></li>
<li><a href="#slider-3"></a></li>
</ul>
</div> <!-- end slider content class -->
</div> <!-- end slider 2 -->
<div id="slider-3" class="slider helper">
<div id="animation-3">
</div> <!-- end animation 3 -->
<div class="tour-slider-content">
<ul>
<li><a href="#slider-1"></a></li>
<li><a href="#slider-2"></a></li>
<li class="active"><a href="#slider-3"></a></li>
</ul>
</div> <!-- end slider content class -->
</div> <!-- end slider 3 -->
</div> <!-- end yout slider -->提前谢谢你的帮助。
干杯!
发布于 2014-03-21 15:23:26
将函数移动到变量中(给它一个名称),每次需要时删除并回忆setInterval:
timer = setInterval(do_slide, 10000);
...
function do_slide(){
$('.slider:visible .active').next('li').find('a').trigger('click');
$('.helper').first().removeClass('helper');
if (!$('#slider-3').hasClass('helper')) {
$('#slider-1, #slider-2, #slider-3').addClass('helper');
$('#slider-1 .active').find('a').trigger('click');
$('#slider-3').hide();
}
}然后,只需在click事件上调用以下行:
if (timer) clearInterval(timer);
timer = setInterval(do_slide, 10000);https://stackoverflow.com/questions/22562671
复制相似问题