嗯,這是輕度的樂趣,瞭解你的代碼是如何工作的,但在此之前我做到了...
我改寫成這樣:(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