Slyweb
На разработку сайта! Скидки 50%!

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

Вы можете задавать любые вопросы по jQuery.

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

Сообщение ASPtema » 22 ноя 2009, 04:00

имеется следующий код:
Код: Выделить всё
<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 все идет более-менее нормально, но я не хочу из пушки по воробьям стрелять. Как можно сгладить разворот эффекта???
ASPtema
 

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

Сообщение admin » 22 ноя 2009, 13:07

Добавьте в .accordion p height:100px;
admin
Администратор
 
Сообщения: 165
Зарегистрирован: 15 авг 2009, 20:02

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

Сообщение ASPtema » 22 ноя 2009, 17:16

добавил. Получилось. И естественно родился вопрос - а если параграфы разной высоты?
ASPtema
 

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

Сообщение RomaTTi » 22 ноя 2009, 19:41

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

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

Сообщение asptema » 24 ноя 2009, 02:46

Всем большое человеческое спасибо! Заработало! вот чисто 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");
});

наверняка есть способ записать то же самое короче. но меня и так устраивает.
asptema
 
Сообщения: 4
Зарегистрирован: 22 ноя 2009, 17:31

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

Сообщение admin » 25 ноя 2009, 13:21

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

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

Сообщение asptema » 26 ноя 2009, 00:21

кто короче? :) :) :)
скоро видать на jQ можно будет написать: $('#myid').свернисьнахкрасиво();
asptema
 
Сообщения: 4
Зарегистрирован: 22 ноя 2009, 17:31

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

Сообщение admin » 26 ноя 2009, 02:26

Может быть ещё короче кто знает? :D
admin
Администратор
 
Сообщения: 165
Зарегистрирован: 15 авг 2009, 20:02

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

Сообщение sultan » 30 дек 2009, 18:16

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


Вернуться в Вопросы по jQuery

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron