很酷的小滑块,你要去这里!你说你是初学者?我想说你已经很好地掌握了 jQuery!同样在我忘记之前,请解决您的评论:如果您在 stackoverflow 上发布一些内容......它将被很多人查看:)。很少有人来到这里却得不到任何帮助(尽管您可能并不总能得到答案)。
幸运的是,我发现了你的问题!就在这里:
else if(loopPrev==true){
sliderActive=true
$('.item-holder').css({
'left':clonePos
});
$('.item-holder').animate({
'left':holderPos+$('.slider').width()+'px'
},function(){
sliderActive=false;
});
};
您正在检查是否循环播放,将滑块设置为活动状态,将下一张幻灯片设置为索引中的最后一张幻灯片(然后同时将其推到该位置),然后像往常一样制作动画。这导致了两个运动:首先到索引的后面,然后到 holderPos+$('.slider').width()+'px' 的值......因此你的行为很奇怪。这应该有助于:
else if(loopPrev==true){
sliderActive=true;
$('.item-holder').animate({
'left':"-1800px"
}, function(){
sliderActive=false;
})
};
值“-1800px”只是我预先计算的缓冲区中的最后一张幻灯片……您应该能够毫无问题地将其替换为您的 clonePos 变量。
*编辑:您还应该将变量 clonePos 更改为如下所示:
var clonePos = '-'+($('.item').index()-1)*($('.slider').width());
当您在索引中的最后一张幻灯片和第一张幻灯片之间交换时,它将消除一个错误(如果您愿意的话,一个“平滑过渡”)。
**
第二部分
**
为了实现无限滚动的错觉,您需要在“左按下”动画调用中嵌入回调“后推”函数。这里已经很晚了,所以我还没有测试我要编写的代码,但我相当有信心它会为你工作。
else if(loopPrev==true){
sliderActive=true;
$('.item-holder').animate({
'left':clonePos
}, function(){
$(this).css('left':holderPos+$('.slider').width()+'px');
sliderActive=false;
})
};
如果您看一下,这与我提供的原始答案没有太大区别。我们所做的只是获取 animate 的回调函数,并添加一个调用以将位置滑动到原始索引位置。同样,未经测试,但想法是 .animate() 将滑动到克隆,一旦完成,您的回调会将克隆与原始交换,然后停用滑块。
你离得不是很远!这是 animate 函数的语义规则(试图帮助您理解回调的工作方式):
animate( params, [duration], [easing], [callback] )
- params 是我们的左调用(在这种情况下是克隆的幻灯片)
- 此处忽略持续时间
- 此处忽略缓动
- 回调是我们的 function() 调用,它执行我们的小大卫科波菲尔交换
希望这可以帮助!