当我添加一些改变内容长度的东西时,我想控制容器的自动高度变化。现在,如果我对内容应用 innerHTML 更改,则高度会相应更改。我想对该高度变化应用过渡。我怎样才能做到这一点?(我也可以使用 jQuery )
问问题
5469 次
3 回答
12
记录改变内容前的高度,改变内容,记录之后的高度,设置高度为前者的高度,动画为后者的高度。动画完成后,再次将高度设置为自动。您可以使用height
和来做到这一点animate
。
在 JSFiddle 上试试。
var texts = [
"This is just some sample text that's being used to demonstrate animating the height when content changes.",
"Shorter."
];
var div = $('div').click(changeContent);
function changeContent() {
var oldHeight = div.height();
texts.push(div.text());
div.text(texts.shift());
var newHeight = div.height();
div.height(oldHeight);
div.animate({height: newHeight}, 'fast', function() {
div.height('auto');
});
}
div {
width: 150px;
background: lightgray;
overflow-y: hidden;
}
<div>This is some example content.</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
于 2012-11-11T00:46:26.347 回答
0
<div id="containter" style="overflow:hidden">
<div>
Content.....
</div>
</div>
//add something...
$('#container').animate({height:$('#container').content().outerHeight()});
或者:
$('#container').animate({height:$('#container').children().first().outerHeight()});
并在容器内添加附加到 div 时:
$('#container').children().first().append(somethingNew);
于 2012-11-11T00:49:52.840 回答
0
我在更改高度时禁用了按钮并添加了淡入淡出效果。此解决方案对于更新产品过滤器等很有用。
我也检查了box-sizing
财产。如果是这样,box-sizing
那么当新内容具有相同的高度时,我会newHeight
通过.outerHeigth()
而不是.height()
防止高度波动。您可以检查这种情况,例如通过将random
变量设置为 value 5
。原因是
.height()
无论 CSS box-sizing 属性的值如何,都将始终返回内容高度。
$('#button').click(function() {
var $button = $(this),
buttonOriginalText = $button.html();
$button.prop('disabled', true).html('Updating...');
$('#content').animate({
opacity: 0
}, 'fast', function() {
var newHeight,
$content = $(this),
oldHeight = $content.height();
$content.html(getRandomContent());
newHeight = ('border-box' === $content.css('box-sizing') ? $content.outerHeight() : $content.height());
$content.height(oldHeight).animate({
height: newHeight,
opacity: 1
}, 'slow', function() {
$content.height('auto');
$button.prop('disabled', false).html(buttonOriginalText);
});
});
});
function getRandomContent() {
var random = 1 + Math.round(Math.random() * 11), // 1..12
paragraph = '<p>Paragraph</p>';
return paragraph.repeat(random);
}
* {
box-sizing: border-box; /* comment out to test "content-box" */
font: 16px Helvetica, 'sans-serif';
}
.content {
counter-reset: content;
padding: 6px 18px;
}
.content p {
counter-increment: content;
}
.content p:after {
content: ' ' counter(content) '.';
}
.content-box {
border: 2px solid red;
margin-top: 24px;
max-width: 220px;
}
<button id="button" class="button">Update the content</button>
<div class="content-box">
<div id="content" class="content">Animatie the automatic height when content is resized.</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
于 2019-11-09T08:38:18.537 回答