Подтвердить что ты не робот

Высота анимации jQuery

У меня есть кнопка и div с внутри текста:

<h2>Click me</h2>
<div class="expand">Lot of text here....</div>

Я хочу показать только 2 строки текста по умолчанию, поэтому я поставил высоту в 30 пикселей и переполненную Скрытую.

Когда я нажимаю на элемент H2, я хочу анимировать текст в slideDown, и если я нажму еще раз, то он сдвинетUp на высоту по умолчанию (30px).

Я пытаюсь многое с помощью jQuery, но он не работает.

EDIT:

У меня также есть несколько "расширений" и более одного "H2", а текст отличается от div, поэтому высота не исправлена ​​... Я хотел бы перейти на "авто" высоту или на 100%.

Может кто-нибудь мне помочь? Спасибо!

4b9b3361

Ответ 1

Вы можете сохранить высоту перед тем, как похудеть до 30 пикселей при загрузке страницы, например:

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

Затем в вашем обработчике click:

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

Итак, что это такое, получим .height() (запустите это в document.ready) перед установкой overflow: hidden и сохраните его через $.data(), затем в обработчиках click (через .toggle(), чтобы чередовать), мы используем это значение ( или 30), каждый другой щелчок на .animate() до.

Ответ 2

Свойство scrollHeight элемента DOM также может дать вам необходимую высоту.

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

Рабочий пример можно найти на http://jsfiddle.net/af3xy/4/

Ответ 3

Этот поток не самый новый, но здесь другой подход.

Сегодня я столкнулся с той же проблемой и не смог заставить ее работать правильно. Даже при правильной высоте, рассчитанной с использованием height: auto, анимация не дала бы мне правильных результатов. Я попытался поместить его в $(window).load вместо $(document).ready, что немного помогло, но все же отрезало мою последнюю строку текста.

Вместо того, чтобы анимировать высоту, я смог решить проблему, добавив и удалив скрытый класс в мой div динамически. Если вы используете jQuery-UI, вы можете применить длительность этих эффектов. Кажется, что это работает и во всех браузерах.

Здесь рабочий экзамен.