Страница 1 из 1

Некрасивый slideToggle. Замучался уже.

СообщениеДобавлено: 22 ноя 2009, 04:00
ASPtema
имеется следующий код:
Код: Выделить всё
<script type="text/javascript" src="jquery.js"></script>

<script type="text/javascript">
$(document).ready(function(){
   
   $(".accordion h3:first").addClass("active");
   $(".accordion p:not(:first)").hide();

   $(".accordion h3").click(function(){
      $(this).next("p").slideToggle("slow")
      .siblings("p:visible").slideUp("slow");
      $(this).toggleClass("active");
      $(this).siblings("h3").removeClass("active");
   });

});
</script>

<style type="text/css">
body {
   margin: 10px auto;
   width: 570px;
   font: 75%/120% Arial, Helvetica, sans-serif;
}
.accordion {
   width: 480px;
   border-bottom: solid 1px #c4c4c4;
}
.accordion h3 {
   background: #e9e7e7 url(images/arrow-square.gif) no-repeat right -51px;
   padding: 7px 15px;
   margin: 0;
   font: bold 120%/100% Arial, Helvetica, sans-serif;
   border: solid 1px #c4c4c4;
   border-bottom: none;
   cursor: pointer;
}
.accordion h3:hover {
   background-color: #e3e2e2;
}
.accordion h3.active {
   background-position: right 5px;
}
.accordion p {
   background: #f7f7f7;
   margin: 0;
   padding: 10px 15px 20px;
   border-left: solid 1px #c4c4c4;
   border-right: solid 1px #c4c4c4;
}
</style>
</head>

<body>

<div class="accordion">
   <h3>Question One Sample Text</h3>
   <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi malesuada, ante at feugiat tincidunt, enim massa gravida metus, commodo lacinia massa diam vel eros. Proin eget urna. Nunc fringilla neque vitae odio. Vivamus vitae ligula.</p>
   <h3>This is Question Two</h3>
   <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi malesuada, ante at feugiat tincidunt, enim massa gravida metus, commodo lacinia massa diam vel eros. Proin eget urna. Nunc fringilla neque vitae odio. Vivamus vitae ligula.</p>
   <h3>Another Questio here</h3>
   <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi malesuada, ante at feugiat tincidunt, enim massa gravida metus, commodo lacinia massa diam vel eros. Proin eget urna. Nunc fringilla neque vitae odio. Vivamus vitae ligula.</p>
   <h3>Sample heading</h3>
   <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi malesuada, ante at feugiat tincidunt, enim massa gravida metus, commodo lacinia massa diam vel eros. Proin eget urna. Nunc fringilla neque vitae odio. Vivamus vitae ligula.</p>
   <h3>Sample Question Heading</h3>
   <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi malesuada, ante at feugiat tincidunt, enim massa gravida metus, commodo lacinia massa diam vel eros. Proin eget urna. Nunc fringilla neque vitae odio. Vivamus vitae ligula.</p>
</div>

</body>
</html>

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

Re: Некрасивый slideToggle. Замучался уже.

СообщениеДобавлено: 22 ноя 2009, 13:07
admin
Добавьте в .accordion p height:100px;

Re: Некрасивый slideToggle. Замучался уже.

СообщениеДобавлено: 22 ноя 2009, 17:16
ASPtema
добавил. Получилось. И естественно родился вопрос - а если параграфы разной высоты?

Re: Некрасивый slideToggle. Замучался уже.

СообщениеДобавлено: 22 ноя 2009, 19:41
RomaTTi
Если параграфы разной высоты, то получи размер параграфа.Например $("p").height()

Re: Некрасивый slideToggle. Замучался уже.

СообщениеДобавлено: 24 ноя 2009, 02:46
asptema
Всем большое человеческое спасибо! Заработало! вот чисто jQ:
Код: Выделить всё
$(".accordion h3").click(function(){
      var h = $(this).next('div').height();
      $(this).next("div").height(h).slideToggle(1000).siblings("div:visible").slideUp(1000);
      $(this).toggleClass("active");
      $(this).siblings("h3").removeClass("active");
});

наверняка есть способ записать то же самое короче. но меня и так устраивает.

Re: Некрасивый slideToggle. Замучался уже.

СообщениеДобавлено: 25 ноя 2009, 13:21
admin
Самый минимальный код
Код: Выделить всё
$(function(){
$(".accordion p:not(:first)").hide();
$(".accordion h3").click(function(){
      var h = $(this).next().height();
      $(this).next().height(h).slideToggle();
});
});

Re: Некрасивый slideToggle. Замучался уже.

СообщениеДобавлено: 26 ноя 2009, 00:21
asptema
кто короче? :) :) :)
скоро видать на jQ можно будет написать: $('#myid').свернисьнахкрасиво();

Re: Некрасивый slideToggle. Замучался уже.

СообщениеДобавлено: 26 ноя 2009, 02:26
admin
Может быть ещё короче кто знает? :D

Re: Некрасивый slideToggle. Замучался уже.

СообщениеДобавлено: 30 дек 2009, 18:16
sultan
Еще короче, у меня работает:
$(".accordion").click(function () {
$(this).next().slideToggle("normal");
$(this).toggleClass("active"); return false;
});