水平jquery滚动条使用位置:绝对;不断滚动
Horizontal jquery scroller using position:absolute; with constant scroll
我已经设法做到了这一点,它对固体宽度div效果很好,但不能弄清楚如何在div的宽度改变时操纵它。
问题:我如何使这个函数考虑到每个"轮"后的不同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/
这很有趣,我理解你的代码是如何工作的,但在我这样做之前…
我把它改写成这样:(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));
});
});
如果你有问题或想要稍微调整一下。我很高兴你能帮助你。但我希望你能自己处理。
注:我最初的评论是粗鲁的,你的水平滚动是ok的大拇指(但你希望一些.width()
调用的值是不同的)
相关文章:
- 当打开绝对定位下拉菜单时,页面将滚动到顶部
- 使用绝对位置时,jQuery向左滚动不起作用
- CSS,标题绝对,向下滚动
- 带位置的跨度:绝对不会在容器溢出时创建滚动条
- (IE9)删除浮动或绝对定位的元素将导致同级元素的滚动条滚动回顶部
- 固定 Div 内的相对 DIV 内的绝对 DIV 在滚动时消失
- 页脚的动态绝对位置,缺少像素 - 无限滚动
- 如何将绝对元素水平滚动到我想要的位置
- jQuery绝对侧边滚动,停在父级的顶部和底部
- Hammer.js元素在绝对容器滚动容器中
- 使用水平滚动将潜水位置从绝对更改为固定
- 当位置样式为绝对时,滚动上的文本框定位问题
- 无论如何,如果绝对位置元素位于屏幕下方,则使正文滚动条出现
- 绝对位置元素未隐藏在滚动框之外
- 父母是绝对的;仅当滚动条超过父对象的高度限制时,才为子对象提供滚动条
- 如何使图像部分滚动?位置:固定和位置:绝对之间的中间位置
- 如何在绝对布局中允许垂直滚动
- 我如何使平滑滚动在一个绝对元素与Jquery
- 绝对的HTML元素和浏览器滚动
- 位置:绝对,我无法向下滚动我的内容