如果您更改元素的宽度或在时间轴中添加/删除一些新元素,此解决方案不会中断。
这是工作的jsFiddle。
var liWidth = $('#timeline ul li').outerWidth(true);
//this calculates element's width with their margins/paddings/borders
var liTotal = $('#timeline ul li').index()-9;
//need to descry first seen li's from calculation for true value of MaxRange
var MaxRange = ( liTotal * liWidth ) * -1;
$('.prev').click(function(){
var current = parseInt($('#timeline').css('right'));
if ( current <= 0 && current > MaxRange ) {
$timeline.stop(false,true).animate({'right':'-='+liWidth+'px'},1000);
}
});
$('.next').click(function(){
var current = parseInt($('#timeline').css('right'));
if ( current <= -1 ) {
$timeline.stop(false,true).animate({'right':'+='+liWidth+'px'},1000);
}
});
如果你想完美地做到这一点:你需要添加另一个 if 条件;当左移和右移按钮被点击并且不同的值被添加到 $timeline 的右 css 时,这个按钮不会完美地滑动。
您可以编写一个等式,将当前右侧的值除以 50/liWidth,如果它不可除,您可以重置时间线,然后再次初始化 next/prev 函数。