Основные jQuery slideUp и slideDown сводят меня с ума!
мои навыки jQuery довольно хороши обычно, но это ведет меня с ума!
Это довольно простой аккордеон, который я закодировал с нуля. С помощью jQuery 1.3.2 поэтому не должно быть никаких ошибок, но в основном, если вы посмотрите на пример:
http://www.mizudesign.com/jquery/accordian/basic.html
Я показываю высоту для целевого div справа - если это содержит текст, который он думает, что он короче, чем есть, и прыгает. Если это образ, с которым нет проблем.
Я не могу понять, где я ошибаюсь - это, очевидно, в CSS где-то, но я пробовал все обычные подозреваемые, такие как display:block
любые идеи будут с благодарностью приняты!
твой, Крис!--1-->
PS пожалуйста, простите природу исходного кода, я вырвал его весь проект, над которым я работаю, включает в себя некоторые divs, которые не очень нужно быть там.
10 ответов
Я должен признать, что нашел свое собственное динамическое решение.
http://www.mizudesign.com/jquery/accordian/basic.html должно быть исправлено.
Это очень просто - просто добавляет высоту с помощью .css перед скрытием div. Работает лакомство:)
$("#PlayerButtonsContent div").each (function() {
$(this).css("height", $(this).height());
});
$("#PlayerButtonsContent div").hide();
Я думаю, проблема в том, что при добавлении отступа или маржи он прыгает, это было в моем случае. вы должны анимировать поле в обратном вызове
также "имейте в виду", что таблицы ведут себя багги с slideDown slideUp и скорее используют fadeIn fadeOut
получить высоту, как только div закончил свою анимацию из обратного вызова. Возможно, вы получаете высоту во время анимации div, и вы получаете переходное значение.
Если ваша анимация нервная, попробуйте использовать обратные вызовы. Не открывайте div и не прячьте div одновременно. Вместо этого спрячьте свой первый div и в обратном вызове покажите свой следующий div.
$(".someDiv").slideUp("normal", function(){
/* This animation won't start until the first
has finished */
$(".someOtherDiv").slideDown();
});
Обновлено (из комментариев):
redsquare: http://jqueryfordesigners.com/slidedown-animation-jump-revisited/
у меня также был раздражающий slideUp()
перейти проблема, которая произошла на Safari, но не chrome или IE. Оказалось, что тег div, который я скрывал/показывал, был прямо под другим тегом div, который содержал float:left
divs. Во время скольжения вверх плавающие дивы будут мгновенно перерисованы, вызывая прыжок.
исправление просто добавляло clear:both
к стилю скрытия / отображения div.
моя проблема в том, что у меня есть адаптивный дизайн Я не знаю, какова будет ширина или высота моего элемента. После прочтения этого сообщения в блогеhttp://www.bennadel.com/blog/2263-Use-jQuery-s-SlideDown-With-Fixed-Width-Elements-To-Prevent-Jumping.htm я понял, что jQuery меняет положение моего элемента на фиксированное и возится с расположением элемента. Я добавил следующее в свой CSS для элемента и не заметил никакой плохой стороны эффекты в IE7+, firefox, chrome и safari.
display: none;
overflow: hidden;
position: relative !important;
замена значений margin-top и margin-bottom на значения padding-top и padding-bottom сделала трюк для меня. Не забудьте установить значение маржи в 0 после этого.
проблема связана с IE (режим причуд), пытающимся отобразить "height: 0px".
исправление: анимировать высоту до 1 (не 0), затем скрыть и сбросить высоту:
// slideUp for all browsers
$("div").animate({ height:1 },{ complete:function(){
// hide last pixel and reset height
$(this).hide().css({ height:"" });
}
});
для меня проблема заключалась в поле (или заполнении) на div, чтобы показать/скрыть слайд, но мне нужно было дать поле (или заполнение) этому div. Я решил с помощью этого трюка:
.slide-div:before{
content: " ";
display: block;
margin-top: 15px;
}