嗯,这是轻度的乐趣,了解你的代码是如何工作的,但在此之前我做到了...
我改写成这样:(working fiddle)
function horizontalScroller(ulSelector) {
var horizontalSpan=0;
var collection=[];
function animate(index) {
var cur=collection[index];
var left=parseInt(cur.elem.css('left'));
if(left < cur.reboundPos) {
left+=horizontalSpan;
console.log(left);
cur.elem.css('left',left);
}
cur.elem.animate(
{ left: (left-60) },
2000,
'linear',
function() {animate(index)}
);
}
$(ulSelector).find('li').each(function() {
var $this=$(this);
var width=$this.width();
$this.css('left',horizontalSpan);
collection.push({reboundPos: -1 * width, elem: $this});
horizontalSpan+=width;
animate(collection.length-1);
});
console.log(collection);
console.log(horizontalSpan);
}
$(document).ready(function() {
horizontalScroller('#horizontalScroller');
});
然后我又回到了你的代码,这样做:
var horizontalSpan = 0;// swapped i for a "global" variable
var horizontalScroller = function($elem) {
var left = parseInt($elem.css("left"));
var temp = -1 * $elem.width();// updated to the correct width
if(left < temp) {// now out of bounds is properly calculated
left += horizontalSpan;// proper "wrapping" with just one addition
$elem.css("left", left);
}
$elem.animate({ left: (left-60) }, 2000, 'linear', function() {
horizontalScroller($(this));
});
}
$(document).ready(function() {
$("#horizontalScroller li").each(function() {
$(this).css("left", horizontalSpan);// horizontalSpan!!!
horizontalSpan += $(this).width();// horizontalSpan!!!
horizontalScroller($(this));
});
});
如果你有问题或需要调整它一下。我很乐意帮助你。但我的希望是,你会自己管理。
P.S.我最初的评论是粗鲁的,你是水平滚动是好的竖起大拇指(但你希望这些.width()
调用的一些值的方式不同)
你想要做什么,你是什么意思“让它起作用”? – fdsa
如果你看看jsfiddle,你会看到不同的宽度如何相互碰撞。这是我想要避免的,因此使它像固定宽度的例子。 –
好吧 - 我知道你将需要改变i + = 60,以反映每个列表项的单独宽度。 – fdsa