2012-08-29 76 views
7

this fiddle中,您会注意到当您单击其中一个按钮时,容器将缓慢向上滑动。当它到达顶部时,你会发现它并没有完全滑动。如果你看着检查员,li的底部填充不会像你期望的那样在slideUp()操作中缩小。jQuery slideUp()不缩小填充底部值

任何想法为什么?

注意:向上滑动很慢以更好地显示问题。

注2:当我将jQuery库更改为1.7.2时,它实际上可以正常工作。有趣。

FWIW:我提交了ticket使用jQuery

+2

好像在1.8又回归。 –

回答

2

编辑:

这个回归固定在jQuery的1.8.1 - fiddle


正如你已经注意到的,这是v1.8.0中的另一个bug。

fiddle表明paddingBottom简单地在slideUp的动画的最后减去。细微的paddingBottom减法在您的小提琴上不可见,因为当您在回拨内部拨打slideDown时,paddingBottom会立即加回(对比减去它的方式)。 Fiddle

如果您不希望等到修复程序被释放并且不想降级到1.7.2,临时解决方法使其表现为1.7.2,则会将CSS属性图传递给.animate

function next() { 
    var q = $(this).parents('li'); 
    q.data('originalDimensions', { 
     borderTopWidth: q.css('borderTopWidth'), 
     paddingTop: q.css('paddingTop'), 
     height: q.css('height'), 
     paddingBottom: q.css('paddingBottom'), 
     borderBottomWidth: q.css('borderBottomWidth') 
    }); 
    q.animate({ borderTopWidth:0, paddingTop:0, height:0, paddingBottom:0, borderBottomWidth:0 }, 5000, function(){ 
     $(this).animate($(this).data('originalDimensions'), 5000); 
    }); 
} 

Fiddle

让我们投了你的票,并希望它被固定在1.8.1版本。

编辑:更新了变通方法来存储元素的.data()originalDimensions,这样就可以在以后的时间,并在不同的范围内使用。要一次动画多个元素,使用.each迭代设置.data()

q.each(function() { 
    var $this = $(this); 
    $this.data('originalDimensions', { 
     borderTopWidth: $this.css('borderTopWidth'), 
     //... 
    }); 
}); 
q.animate({ borderTopWidth:0, /*...*/ }, 5000, function() { 
    $(this).animate($(this).data('originalDimensions'), 5000); 
}); 

Fiddle