Quiero animar un <div>
desde 200px
a la auto
altura. Aunque parece que no puedo hacer que funcione. ¿Alguien sabe cómo?
Aquí está el código:
$("div:first").click(function(){
$("#first").animate({
height: "auto"
}, 1000 );
});
javascript
jquery
html
css
jquery-animate
Daniel
fuente
fuente
Respuestas:
Guardar la altura actual:
Cambie temporalmente la altura a auto:
Obtenga la altura automática:
Vuelva a
curHeight
animar aautoHeight
:Y juntos:
fuente
.animated({height: autoHeight}, 1000, function(){ el.height('auto'); });
opacity: 0; position: absolute;
mientras lo mide y elimina esos una vez que haya terminado.OMI, esta es la solución más limpia y fácil:
Explicación: El DOM ya sabe, desde su representación inicial, qué tamaño tendrá el div expandido cuando se configure en altura automática. Esta propiedad se almacena en el nodo DOM como
scrollHeight
. Solo tenemos que recuperar el elemento DOM del elemento jQuery llamandoget(0)
y luego podemos acceder a la propiedad.Agregar una función de devolución de llamada para establecer la altura en automático permite una mayor capacidad de respuesta una vez que se completa la animación (crédito Chris-Williams ):
fuente
clientHeight
, que parece no ser compatible: developer.mozilla.org/en-US/docs/Web/ API / Element.clientHeight$('#first').animate({ height: $('#first').get(0).scrollHeight }, 1000, function() { $(this).height('auto'); });
scrollWidth
animaciones de ancho.Este es básicamente el mismo enfoque que la respuesta de Box9, pero lo envolví en un buen complemento de jquery que toma los mismos argumentos que un animado regular , para cuando necesita tener más parámetros animados y cansarse de repetir el mismo código una y otra vez :
editar: encadenable y más limpio ahora
fuente
Una mejor solución no dependería de JS para establecer la altura de su elemento. La siguiente es una solución que anima un elemento de altura fija a la altura completa ("automática"):
https://gist.github.com/2023150
fuente
height
en un valor fijo (por ejemplo, 122 px). Mi elemento cambió de altura después de un tiempo, así que tuve que reemplazar el argumento de duración (400) con opciones{duration: 400, complete: function() {$selector.css('height', 'auto');}}
esto está funcionando y es más simple que las soluciones anteriores:
CSS:
JS:
Nota: esta solución requiere jQuery UI
fuente
.addClass
y.removeClass
?fuente
Siempre puede ajustar los elementos secundarios de #first y guardar la altura y la altura del contenedor como una variable. Puede que esta no sea la respuesta más bonita o más eficiente, pero funciona.
Aquí hay un violín donde incluí un reinicio.
pero para sus propósitos, aquí está la carne y las papas:
fuente
Use slideDown y slideUp
fuente
Me las arreglé para arreglarlo: D heres el código.
fuente
Puede hacer que la respuesta de Liquinaut responda a los cambios en el tamaño de la ventana agregando una devolución de llamada que restablezca la altura a automática.
fuente
Básicamente, la altura automática solo está disponible para usted después de representar el elemento. Si establece una altura fija, o si su elemento no se muestra, no puede acceder a él sin ningún truco.
Afortunadamente, hay algunos trucos que puedes usar.
Clone el elemento, muéstrelo fuera de la vista, dele altura automática y puede tomarlo del clon y usarlo más tarde para el elemento principal. Uso esta función y parece funcionar bien.
USO:
fuente
siempre puedes hacer esto:
Aquí hay un violín: http://jsfiddle.net/Zuriel/faE9w/2/
fuente
.appendTo("body")
por.appendTo(el.parent())
Sus selectores no parecen coincidir. ¿Su elemento tiene una identificación de 'primero', o es el primer elemento en cada div?
Una solución más segura sería usar 'this':
fuente
$(this)
dentro de su controlador de clics.animate({height: 'auto'})
No tiene ningún efecto. Al menos, no con jQuery 1.6.4.Prueba este,
fuente
Aquí hay uno que funciona con BORDER-BOX ...
Hola chicos. Aquí hay un complemento jQuery que escribí para hacer lo mismo, pero también explica las diferencias de altura que ocurrirán cuando lo haya
box-sizing
configuradoborder-box
.También incluí un complemento "yShrinkOut" que oculta el elemento reduciéndolo a lo largo del eje y.
Cualquiera de los parámetros que utilicé puede omitirse o establecerse en nulo para aceptar los valores predeterminados. Los parámetros que utilicé:
fuente
Alternar diapositiva ( respuesta de Box9 expandida)
fuente
Estoy publicando esta respuesta a pesar de que este hilo es antiguo. No pude obtener la respuesta aceptada para trabajar para mí. Este funciona bien y es bastante simple.
Cargo la altura de cada div que quiero en los datos
Entonces solo lo uso al animar al hacer clic.
Estoy usando la transición CSS, por lo que no uso el jQuery animate, pero podría animar de la misma manera.
fuente
puede almacenarlo en un atributo de datos.
fuente
Necesitaba esta funcionalidad para múltiples áreas de lectura más en una página, implementando esto en un código abreviado de Wordpress. Me encontré con el mismo problema.
Diseñar técnicamente todos los más leídos en la página tienen una altura fija. Y quería poder expandirlos por separado a una altura automática con una palanca. Primer clic: 'expandir a la altura total del espacio de texto', segundo clic: 'contraer de nuevo a la altura predeterminada de 70 px'
HTML
CSS
Entonces, por encima de esto, parece muy simple el
data-base
atributo que necesito para establecer la altura fija necesaria. Eldata-height
atributo que solía almacenar la altura real (dinámica) del elemento.La parte jQuery
Primero he usado una función clickToggle para mi primer y segundo clic. La segunda función es más importante:
setAttr_height()
todos los.read-more
elementos tienen sus alturas reales establecidas en la carga de la página en elbase-height
atributo. Después de eso, la altura base se establece mediante la función jquery css.Con nuestros dos atributos establecidos, ahora podemos alternar entre ellos de una manera suave. Solo
data-base
cambie la altura deseada (fija) y cambie la clase .read-more por su propia IDTodos pueden verlo trabajando en un violín FIDDLE
fuente
Si todo lo que quiere es mostrar y ocultar decir un div, entonces este código le permitirá usar jQuery animate. Puede hacer que jQuery anime la mayor parte de la altura que desee o puede engañar a animar animando a 0px. jQuery solo necesita una altura establecida por jQuery para convertirlo en automático. Entonces, .animate agrega el estilo = "" al elemento que convierte .css (height: auto).
La forma más limpia en que he visto este trabajo es animar a la altura que esperas, luego dejar que se configure automáticamente y puede verse muy uniforme cuando se hace correctamente. Incluso puede animar más allá de lo que espera y se recuperará. Animar a 0px con una duración de 0 simplemente deja caer la altura del elemento a su altura automática. Para el ojo humano, se ve animado de todos modos. Disfrutar..
Lo siento, sé que esta es una publicación antigua, pero sentí que sería relevante para los usuarios que buscan esta funcionalidad aún con jQuery que se encuentran con esta publicación.
fuente
Reuní algo que hace exactamente lo que estaba buscando y se ve muy bien. El uso de scrollHeight de un elemento te da la altura de cuando se cargó en el DOM.
fuente