jQuery position().left 在动画 marginLeft '-=300px' 后总是 === 0

Posted

技术标签:

【中文标题】jQuery position().left 在动画 marginLeft \'-=300px\' 后总是 === 0【英文标题】:jQuery position().left always === 0 after animating marginLeft '-=300px'jQuery position().left 在动画 marginLeft '-=300px' 后总是 === 0 【发布时间】:2012-12-14 10:02:19 【问题描述】:

现在这让我发疯了!我想使用 - 边距为元素“左”设置动画。但是,一旦显示了所有子元素,我还想在相反的方向上为相同的元素设置动画。我的脚本不是那么简单而是类似:

timer = setInterval(function()
    var direction = ($('ul','.column').css('margin-left') <= 0)? '-=': '+=';
    $('ul','.column').animate(marginLeft:direction+($('li','.column').width())+'px',500);
,1000);

我也尝试过$('ul,'.column').position().left &lt;=0,而不是上面的条件。我的问题是margin-leftposition().left 永远不会返回负变量:S。如果变量“应该”为负,它总是返回为 0。我可以很容易地计算出我希望动画朝相反方向移动的位置,但如果条件不是负数,这将不起作用。

我非常感谢您了解为什么 margin-leftposition().left 总是返回 0 而不是 -1000 或其他什么。但是,如果您有替代解决方案,我仍然会很高兴:)

【问题讨论】:

P.S 如果您使用更新的 jQuery 库,则不再需要“px”。 【参考方案1】:

jQuery 的 CSS margin-left 将返回一个字符串,如:20px 你需要使用

去掉 'px'
parseInt( $('ul','.column').css('margin-left') , 10 )

应该是这样的:

timer = setInterval(function()
    var margLeft = parseInt( $('ul','.column').css('margin-left') , 10);
    var direction =  margLeft<=0 ? '-=': '+=';
    $('ul','.column').animate( marginLeft: direction+($('li','.column').width()) ,500);
,1000);

如果我没记错的话,Chrome 对在 CSS 中未指定应用动画的属性的元素进行动画处理时存在问题,这意味着:确保在样式表中为您计划设置的元素的 margin-left 设置一个值动画。

【讨论】:

@Beneto 下次不要发疯,早点来。 “不知道并不可耻。可耻的是不问。” :)

以上是关于jQuery position().left 在动画 marginLeft '-=300px' 后总是 === 0的主要内容,如果未能解决你的问题,请参考以下文章

jQuery .clone()

jquery几种获取元素left方式的异同

jQuery offset,position,offsetParent,scrollLeft,scrollTop html控件定位 css position

各种位置和高度计算:.position().offset().outerHeight().scrollTop.scrollHeight.clientHeight

Jquery Gritter set position

jQuery position( ) 方法