我在许多元素上使用jQuery UI的.hide('slide')
动画。问题是当我在这些元素上指定margin
时,动画似乎跳了下来,一旦完成,就会返回到原来的位置。如果我从这些元素中删除margin
,则问题就不复存在了。
div.score {
width: 32px;
height: 32px;
background-color: blue;
color: white;
text-align: center;
margin: 10px;
padding-top: 6px;
}
$('div.score').click(function() {
var $this = $(this);
$this.hide('slide', { direction: 'right' }, 250, function() {
$this.show('slide', { direction: 'left' }, 250)
.text(parseInt($this.text(), 10) + 1);
});
});
<div class="score">0</div>
<div class="score">0</div>
有人可以解释这是什么原因,这是一个错误吗?
答案 0 :(得分:9)
div.ui-effects-wrapper
在动画(jQuery UI)之前包装元素div.score
。脚本使用outerHeight(true)
方法计算其高度,包括边距http://api.jquery.com/outerHeight。
因此div.ui-effects-wrapper
身高为div.score
身高+ div.score
保证金 - &gt; 52px
但是你的元素仍然有边距规则,因此实际的封装高度为52px + 20px = 72px
。
我认为这是一个错误。
您可以使用此版本(使用简单的包装器) http://jsfiddle.net/vpetrychuk/s5U38/31/
答案 1 :(得分:2)
我用另一个div作为容器来解决这个问题,它需要保证金,而计数器本身没有保证金:
<强> HTML 强>
<div class="slideContainer">
<div class="score">0</div>
</div>
<强> CSS 强>
div.slideContainer {
width: 32px;
height: 32px;
margin: 10px;
}
答案 2 :(得分:0)
您可以使用margin: auto 0 10px;
或magin: auto 10px 10px;
代替margin: 10px;