我正在尝试制作一个从右向左滑动的无限滑块,一次显示4张幻灯片。我的意思是无限的东西,比如当幻灯片1被隐藏时,它会移动到最后一张幻灯片旁边的末尾。
这是我的HTML:
<div id="slider">
<div class="slide">slide 1</div>
<div class="slide">slide 2</div>
... up to slide 6
</div>
我是jquery的新手,所以我不知道如何完成这项工作。
jquery的:
var currentSlide = 0;
setInterval(function(){
$('.slide').animate({marginLeft:-$('.slide').width()});
$('.slide').eq(currentSlide++).insertAfter($('.slide').last())
}, 2000);
每张幻灯片都包含带背景图片的文字。这就是我现在所拥有的,滑动是丑陋的。我还想设置我想用jquery显示的数量,所以我没有编辑我的CSS,我也希望在悬停在滑块上时集成类似暂停的东西。请帮忙,谢谢。
答案 0 :(得分:2)
我认为你对如何完成这件事有个好主意。但是你的代码需要纠正。
您正在设置所有'.slide'
的动画,因为它们都是内联的,您只需要为第一张幻灯片设置动画,之后的所有内容都会跟随:
$('.slide').first().animate({marginLeft:-$('.slide').width()});
你也在同时动画和移动它。只需在动画完成后移动它。
$('.slide').first().animate({
marginLeft:-$('.slide').width()
}, 'slow', function(){
//once completely hidden, move this slide next to the last slide
//and reset the margin-left to 0
$(this).appendTo($(this).parent()).css({marginLeft: 0});
});
这是jsfiddle。
要解决滑动问题,我们需要为幻灯片添加一个包装器,并根据所有幻灯片的总宽度设置其宽度。
新标记:
<div id="slider">
<div id="slide-container">
<div class="slide">slide 1</div>
<div class="slide">slide 2</div>
</div>
</div>
jQuery的:
var w = $('#slider').width() / 4;
var l = $('.slide').length;
//set each slide width
$('.slide').width(w);
//set the container width to fix the animation sliding issue
$('#slide-container').width(w * l)
要在悬停在滑块上时添加暂停,只需clearInterval
并重置它即可继续:
function slider(){
$('.slide').first().animate({
marginLeft: -w
}, 'slow', function () {
$(this).appendTo($(this).parent()).css({marginLeft: 0});
});
}
//setInterval on DOM ready
var timer = setInterval(slider, 2000);
$('#slider').hover(function(){
//mouse in, clearinterval to pause
clearInterval(timer);
},function(){
//mouse out, setinterval to continue
timer = setInterval(slider, 2000);
});
请参阅此更新jsfiddle。