2013-01-06 79 views
2

我已经设法得到这么远,它适用于固体宽度的div,但不能解决如何操作它的工作时div的宽度变化。水平jquery滚动使用位置:绝对;与恒定滚动

问题:如何让这个函数考虑到每个'圆'后不同的div宽度?

var horizontalScroller = function($elem) { 
    var left = parseInt($elem.css("left")); 
    var temp = -1 * $('#horizontalScroller li').width(); 
    if(left < temp) { 
     left = $('#horizontalScroller').width(); 
     $elem.css("left", left); 
    } 
    $elem.animate({ left: (left-60) }, 2000, 'linear', function() { 
     horizontalScroller($(this)); 
    }); 
} 


$(document).ready(function() { 
    var i = 0; 
    $("#horizontalScroller li").each(function() { 
      $(this).css("left", i); 
      i += $(this).width(); 
      horizontalScroller($(this)); 
    }); 

}); 

工作示例(固定宽度):http://jsfiddle.net/GL5V3/
工作示例(具有不同宽度):http://jsfiddle.net/wm9gt/

+0

你想要做什么,你是什么意思“让它起作用”? – fdsa

+0

如果你看看jsfiddle,你会看到不同的宽度如何相互碰撞。这是我想要避免的,因此使它像固定宽度的例子。 –

+0

好吧 - 我知道你将需要改变i + = 60,以反映每个列表项的单独宽度。 – fdsa

回答

4

嗯,这是轻度的乐趣,了解你的代码是如何工作的,但在此之前我做到了...

我改写成这样:(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()调用的一些值的方式不同)

+0

这是完美的,正是我所需要的。非常感谢你。奖金将在未来10小时内奖励给您(因为该网站在此之前不会让我这么做)。 –

+0

我有一个问题,你的函数的第13行和我的更新函数的第9行的确切值是多少?为什么是60呢? –

+0

1.它不是你最初的功能吗? 2.这是我们想要生成的新左图,基本上说是在2秒内左移60像素.... – Khez