2010-07-21 1 views
0

У меня есть тест-случай здесь:Как предотвратить изменение ширины при использовании слайд-модуля jQuery?

http://www.jsfiddle.net/kPBbb/

После того, как содержание имеет .content, в .wrapper самого термоусадочных обертки, предположительно потому, что .content является display: none ред. Я бы хотел, чтобы .wrapper вел себя так, как будто .content все еще были там после анимации, поддерживая начальный размер.

.wrapper был float: left-й изда, чтобы показать проблему (заставляя поведение термоусадочной пленки), но не всегда может быть, поэтому я хотел бы решение, которое не делает вовлекает чтение ширины перед анимацией и повторное использование этого после.

Есть ли простое исправление?

ответ

0

Если вы укажете ширину обертки, она будет оставаться того же размера, если вы сдвинете ее вниз.

.wrapper{ 
    width: 200px; 
} 

Я не уверен, есть ли лучшее или более общее решение этой проблемы.

0

Вместо использования дисплея: нет вы можете использовать visibility:hidden, а затем visibility:visible для отображения информации.

display:none 

Это будет действовать, как если бы данные не на странице и поэтому оболочка будет сжиматься себя, как только свойство отображения изменяется на none

visibility:hidden 

Видимость позволяет данные по-прежнему будет хранится на своем месте на странице, но просто невидим.

Попробуйте это и посмотрите, поможет ли это вам с вашим вопросом.

+1

jQuery добавляет 'display: none' в качестве параметра t процесса анимации. Это из-под контроля. – Eric

1

Или сделать его динамичным, попробуйте следующее:

var contentWidth = $('.content').width(); 

$('.header').width(contentWidth); 
0

Я бы лично это сделать:

$('.wrapper').each(function() { 
    var wrapper = this; 
    $('.header', wrapper).click(function() { 
    $(this).css('width',$(this).width()); 
    $('.content', wrapper).slideToggle(); 
    }); 
});​ 

Но, может быть, вы даже можете сделать это:

$('.wrapper').each(function() { 
    var wrapper = this; 
    $('.header', wrapper).click(function() { 
     $('.content', wrapper).slideToggle('slow',function(){ 
      $('.content', wrapper).show(); 
      $('.content', wrapper).css('visibility','hidden'); 
      $('.content', wrapper).css('height','0px'); 
     }); 
    }); 
});