2012-02-18 4 views
2

Мой текущий скрипт отлично работает, и тогда 3 кнопки меню (menubtn1, menubtn2, menubtn3) делают высоту контейнера. То, что я хотел бы сделать, это сначала создать анимацию высоты до 0px, а затем оживить их соответствующие высоты.jQuery анимировать высоту шаг за шагом

Таким образом, я могу заменить содержимое моего контейнера при высоте = 0px, а затем масштабировать его, новый контент будет виден.

здесь мой сценарий до сих пор:

$(document).ready(function() { 

    $(".menubtn1").click(function() { 
     $(".container").stop().animate({ 
      height: '350px' 
     }, { 
      queue: false, 
      duration: 600, 
      easing: 'easeInOutQuint' 
     }) 
    }); 
    $(".menubtn2").click(function() { 
     $(".container").stop().animate({ 
      height: '200px' 
     }, { 
      queue: false, 
      duration: 600, 
      easing: 'easeInOutQuint' 
     }) 
    }); 
    $(".menubtn3").click(function() { 
     $(".container").stop().animate({ 
      height: '185px' 
     }, { 
      queue: false, 
      duration: 600, 
      easing: 'easeInOutQuint' 
     }) 
    }); 

});​ 
+0

http://jsfiddle.net/craigzilla/RpzpZ/1/ –

ответ

0

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

$(".container").stop().animate({height:0},{queue:false, duration:600, easing: 'easeInOutQuint', complete: function(){ 
    $(this).html('your content').animate({height:350},600); 
}}) 

Я обновил свой скрипку, а :) http://jsfiddle.net/RpzpZ/3/

Вот еще один вариант. Вероятно, я это сделаю. Я добавил контент непосредственно в html. я не знаю, если вам нужны фиксированные высоты различного содержания, здесь я использовал slideUp и вниз, так что всегда будет приспособиться к высоте содержания

http://jsfiddle.net/RpzpZ/5/

+0

Это работает как шарм. Можно ли загружать DIV вместо «вашего контента»? –

+0

Код выглядит намного более аккуратным, но я, к сожалению, не могу понять это :) Я просто не вижу, где я могу добавить свои разные «контентные» коды? –

+0

@CraigJonathanKristensen, как у вас есть ваше другое содержание? они скрыты divs на странице уже или вы хотите, чтобы они загружались через ajax? – Andy

0

Может просто добавить функцию обратного вызова для вашего одушевленного вызова, который вызывает другую функцию анимации, которая открывает контейнер обратно вверх.

1

Вы можете использовать .slideUp() и .slideDown() вместо использования .animate(), как это:

$(".container") 
    .slideUp("slow", function() { 
     $(this) 
      .html("<p>New content</p> and some other stuff") 
      .slideDown("slow"); 
    }); 

Редактировать

Обновлен пример использования slideUp обратного вызова, чтобы изменить содержимое, а затем сдвиньте его вниз еще раз.

+0

содержание будет установлен в начале slideUp в этом случае. – Andy

+0

@ Andy Конечно, извините, что обновил мой ответ, чтобы использовать обратный вызов. –

0

Вы могли бы сделать что-то вроде этого - >

$(document).ready(function() { 
$("#menubtn1").click(function() { 
     $(".container").animate({height:"0px"}, function() { 
      $("#hidden-content").hide(); 
      $("#show-content").show(function() { 
       $(".container").animate({height:"200px"}) 
      }); 
     }); 
    }); 
}); 
Смежные вопросы