Quero animar um <div>
a partir 200px
de auto
altura. Eu não consigo fazê-lo funcionar embora. Alguém sabe como?
Aqui está o código:
$("div:first").click(function(){
$("#first").animate({
height: "auto"
}, 1000 );
});
javascript
jquery
html
css
jquery-animate
Daniel
fonte
fonte
Respostas:
Salve a altura atual:
Altere temporariamente a altura para automático:
Obtenha a altura automática:
Volte para
curHeight
e anime paraautoHeight
:E juntos:
fonte
.animated({height: autoHeight}, 1000, function(){ el.height('auto'); });
opacity: 0; position: absolute;
enquanto o mede e removendo aqueles quando terminar.Na IMO, esta é a solução mais limpa e fácil:
Explicação: O DOM já sabe, desde sua renderização inicial, qual o tamanho que a div expandida terá quando definida como altura automática. Esta propriedade é armazenada no nó DOM como
scrollHeight
. Nós apenas temos que buscar o elemento DOM do elemento jQuery chamandoget(0)
e então podemos acessar a propriedadeA adição de uma função de retorno de chamada para definir a altura como automática permite maior capacidade de resposta assim que a animação estiver concluída (credit chris-williams ):
fonte
clientHeight
que parece não ser suportado: developer.mozilla.org/en-US/docs/Web/ API / Element.clientHeight$('#first').animate({ height: $('#first').get(0).scrollHeight }, 1000, function() { $(this).height('auto'); });
scrollWidth
animações de largura.Essa é basicamente a mesma abordagem que a resposta do Box9, mas eu a envolvi em um bom plugin de jquery que usa os mesmos argumentos de uma animação normal , pois quando você precisa ter mais parâmetros animados e se cansa de repetir o mesmo código repetidamente :
editar: encadeado e limpador agora
fonte
Uma solução melhor não dependeria do JS para definir a altura do seu elemento. A seguir, é apresentada uma solução que anima um elemento de altura fixa para a altura total ("automática"):
https://gist.github.com/2023150
fonte
height
um valor fixo (por exemplo, 122px). Meu elemento mudou altura depois de um tempo, então eu tive que substituir o argumento de duração (400) com opções{duration: 400, complete: function() {$selector.css('height', 'auto');}}
isso está funcionando e é mais simples que as soluções anteriores:
CSS:
JS:
Nota: Esta solução requer jQuery UI
fonte
.addClass
e.removeClass
?fonte
Você sempre pode agrupar os elementos filhos de #first e salvar a altura height do wrapper como uma variável. Essa pode não ser a resposta mais bonita ou mais eficiente, mas funciona.
Aqui está um violino onde eu incluí uma redefinição.
mas para seus propósitos, aqui está a carne e as batatas:
fonte
Use slideDown e slideUp
fonte
Consegui consertar: D aqui está o código.
fonte
Você pode fazer com que a resposta do Liquinaut responda a alterações no tamanho da janela adicionando um retorno de chamada que ajusta a altura novamente para automático.
fonte
Basicamente, a altura automática está disponível apenas para você depois que o elemento é renderizado. Se você definir uma altura fixa ou se seu elemento não for exibido, não será possível acessá-lo sem truques.
Felizmente, existem alguns truques que você pode usar.
Clone o elemento, exiba-o fora da visualização, dê-lhe a altura automática e você pode retirá-lo do clone e usá-lo mais tarde para o elemento principal. Eu uso essa função e parece funcionar bem.
USO:
fonte
você sempre pode fazer isso:
aqui está um violino: http://jsfiddle.net/Zuriel/faE9w/2/
fonte
.appendTo("body")
por.appendTo(el.parent())
Seus seletores parecem não corresponder. Seu elemento tem um ID de 'primeiro' ou é o primeiro elemento em cada div?
Uma solução mais segura seria usar 'this':
fonte
$(this)
dentro do seu manipulador de cliques.animate({height: 'auto'})
não tem nenhum efeito. Pelo menos, não com o jQuery 1.6.4.Tente este ,
fonte
Aqui está um que funciona com o BORDER-BOX ...
Oi pessoal. Aqui está um plugin jQuery que escrevi para fazer o mesmo, mas também leve em consideração as diferenças de altura que ocorrerão quando você
box-sizing
definirborder-box
.Também incluí um plug-in "yShrinkOut" que oculta o elemento, reduzindo-o ao longo do eixo y.
Qualquer um dos parâmetros que eu usei pode ser omitido ou definido como nulo para aceitar valores padrão. Os parâmetros que eu usei:
fonte
Alternar slide ( resposta do Box9 expandida)
fonte
Estou postando esta resposta mesmo que este tópico seja antigo. Não consegui que a resposta aceita funcionasse para mim. Este funciona bem e é bem simples.
Carrego a altura de cada div que eu quero nos dados
Então eu apenas uso isso ao animar no clique.
Estou usando a transição CSS, portanto, não uso o jQuery animate, mas você pode animar da mesma forma.
fonte
você pode armazená-lo em um atributo de dados.
fonte
Eu precisava dessa funcionalidade para várias áreas de mais leitura em uma página, implementando isso em um código de acesso do Wordpress. Corri para o mesmo problema.
Projete tecnicamente todas as extensões de leitura mais na página têm uma altura fixa. E eu queria poder expandi-los separadamente para uma altura automática com uma alternância. Primeiro clique: 'expandir para a altura total do espaço de texto', segundo clique: 'reduzir para a altura padrão de 70 px'
Html
CSS
Então, acima disso, parece muito simples o
data-base
atributo que eu preciso para definir a altura fixa necessária. odata-height
atributo que eu usei para armazenar a altura (dinâmica) real do elemento.A parte do jQuery
Primeiro, usei a função clickToggle para o meu primeiro e segundo clique. A segunda função é mais importante:
setAttr_height()
todos os.read-more
elementos têm suas alturas reais definidas no carregamento da página nobase-height
atributo. Depois disso, a altura da base é definida através da função jquery css.Com os dois atributos definidos, agora podemos alternar entre eles de maneira suave. Apenas altere o
data-base
para sua altura desejada (fixo) e mudar a classe .read-mais para o seu próprio IDTodos vocês podem vê-lo trabalhando em um violino FIDDLE
fonte
Se tudo o que você deseja é mostrar e ocultar, digamos uma div, esse código permitirá que você use o jQuery animate. Você pode fazer com que o jQuery anime a maior parte da altura desejada ou você pode enganá-lo animando para 0px. O jQuery precisa apenas de uma altura definida pelo jQuery para convertê-lo em automático. Portanto, o .animate adiciona o estilo = "" ao elemento que .css (height: auto) converte.
A maneira mais limpa de ver este trabalho é animar ao redor da altura esperada e deixá-lo definir automaticamente e ele pode parecer muito perfeito quando feito da maneira certa. Você pode até animar o que você espera e ele voltará. A animação para 0px com uma duração de 0 simplesmente reduz a altura do elemento à sua altura automática. Para o olho humano, parece animado de qualquer maneira. Aproveitar..
Desculpe, eu sei que esta é uma postagem antiga, mas achei que isso seria relevante para os usuários que procuram essa funcionalidade ainda com o jQuery que se deparam com essa publicação.
fonte
Eu montei algo que faz exatamente o que eu estava procurando e parece ótimo. O uso do scrollHeight de um elemento fornece a altura de quando ele foi carregado no DOM.
fonte