jQuery animate height

三世轮回 提交于 2019-11-27 08:38:56

You can store the height just before slimming it down to 30px on page load, for example:

$(".expand").each(function() {
  $.data(this, "realHeight", $(this).height());
}).css({ overflow: "hidden", height: "30px" });

Then in your click handler:

$("h2").toggle(function() {
  var div = $(this).next(".expand")
  div.animate({ height: div.data("realHeight") }, 600);
}, function() {
  $(this).next(".expand").animate({ height: 30 }, 600);
});

So what this does is get the .height() (run this in document.ready) before the overflow: hidden it set, and stores it via $.data(), then in the click handlers (via .toggle() to alternate), we use that value (or 30) every other click to .animate() to.

The scrollHeight property of the DOM element could also give you the height you need.

$(".expand").animate({
    height : $(".expand")[0].scrollHeight
},2000);

Working example can be found at http://jsfiddle.net/af3xy/4/

Jules

This thread is not the newest, but here's another approach.

I have been dealing with the very same issue today and could not get it to work properly. Even with the correct height calculated with height: auto applied, the animation would not give me the correct results. I tried putting it in $(window).load instead of $(document).ready, which helped a little, but still cut off my last line of text.

Instead of animating the height itself, I was able to resolve the issue by adding and removing a hidden class to my div dynamically. If you use jQuery-UI, you can apply a duration to these effects. This seems to work in all browsers, too.

Here's a working exampe.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!