2010-08-25 10 views
11

puedo animar fácilmente a la propiedad "opacidad"En jQuery, ¿cómo puedo animar la propiedad de CSS de "altura máxima"?

$("#blah").animate({ opactiy: 0.5}, 1000); 

¿Cómo puedo animar el max-height propiedad CSS ... ejemplo:

$("#blah").animate({ "max-height": 350}, 1000); 

(pista, que el código no funciona)

EDIT: Para contestar las siguientes preguntas:

  1. Hay varias imágenes todo de clase CSS "bla"
  2. Las imágenes son de tamaños al azar, pero todos ellos tienen max-height: 100px
  3. Cuando un usuario se desplaza sobre una imagen, lo quiero para animar al máximo -esta altura (por lo tanto, sin restricciones de la altura)

Respuesta

0

OK, entonces no hay forma de hacer lo que yo quería ... Así que tuve que hacer que mi propia función tuviera la función de "animación" genérica (de x a y en milisegundos d) .

me escribió una entrada de blog que describe cómo lo hice aquí: Generic "Animate" function with jQuery

Incluí una demostración de lo que puede hacer así. El enlace de demostración se encuentra en la parte inferior del artículo o, para los impacientes, puede hacer clic en here.

+0

Alguien ha preguntado y ha resuelto este mismo problema http://stackoverflow.com/questions/4901643/animate-max-width-on-img-jquery – Craig

1

Creo que primero debe animar la propiedad de altura y cuando termine la animación, reemplace la altura establecida en automático y restablezca la altura máxima a la que necesita. :

$("#blah").animate({ "height": 350}, 1000, function(){ 
    $(this).css('height','auto').css('max-height',350); 
}); 
+0

Animación de la propiedad height se extendería imágenes que son más cortos que el "max" - THX para el pensamiento sin embargo. –

1

Estoy confundido por el requisito aquí. Si desea animar algo, presumiblemente debe ser igual a la altura máxima. Haría un enunciado para verificar que la altura de un elemento sea igual a su altura máxima; si es así, elimine la altura máxima y luego anime la altura. Debe ser el mismo efecto

+0

Si animo la altura para, digamos, 1000 ... luego voy a estirar imágenes que tienen solo 300 px de altura. --- PERO, si animo la altura máxima, las imágenes altas crecerán, pero las más cortas no crecerán más allá de 300px ... así que no es el mismo efecto. (Pensándolo bien) –

+0

Ah, ya veo, no estaba anticipando que los elementos fueran imágenes. Creo que este es el camino a seguir. Posiblemente hay una función que toma los tamaños de las imágenes para que usted haga referencia. ¡Lo siento, no puedo ayudar más! Nota: en la pregunta editada dices que no restringirás la altura, lo que es un poco confuso. Entiendo que quiera aumentar la altura restringida. Si el formato es verdadero, puedes animar la altura al 100%. Menciono esto para ayudar a evitar la fusión para otros usuarios – lnrbob

9

Esta pregunta se está haciendo un poco vieja, pero así es como lo resolví usando jQuery básico, en caso de que alguien más necesite una solución simple.

En mi caso, tengo una lista de entradas de blog que primero se procesan en la página con un max-height que solo muestra las primeras 4 líneas de texto, el resto es overflow: hidden. Tengo un botón para expandir/colapsar que alterna el artículo de su forma contraída a expandido (completamente visualizado) y viceversa.

Al principio intenté animar la propiedad de altura máxima directamente y, como has descubierto anteriormente, esto no funcionará. También probé esto con transiciones CSS con el mismo resultado decepcionante.

También intenté configurarlo en un número muy grande como '1000em', pero esto hizo que las animaciones se vieran tontas ya que literalmente se estaba interpolando a un valor tan grande (como era de esperar).

Mi solución utiliza scrollHeight, que se utiliza para determinar la altura natural de cada historia una vez que se carga la página de la siguiente manera:

$(function(){ // DOM LOADED 

    // For each story, determine its natural height and store it as data. 
    // This is encapsulated into a self-executing function to isolate the 
    // variables from other things in my script. 
    (function(){ 

    // First I grab the collapsed height that was set in the css for later use 
    var collapsedHeight = $('article .story').css('maxHeight'); 

    // Now for each story, grab the scrollHeight property and store it as data 'natural'   
    $('article .story').each(function(){ 
     var $this = $(this); 

     $this.data('natural', $this[0].scrollHeight); 
    }); 

    // Now, set-up the handler for the toggle buttons 
    $('.expand').bind('click', function(){ 
     var $story = $(this).parent().siblings('.story').eq(0), 
      duration = 250; // animation duration 

     // I use a class 'expanded' as a flag to know what state it is in, 
     // and to make style changes, as required. 
     if ($story.hasClass('expanded')) { 
     // If it is already expanded, then collapse it using the css figure as 
     // collected above and remove the expanded class 
     $story.animate({'maxHeight': collapsedHeight}, duration); 
     $story.removeClass('expanded'); 
     } 
     else { 
     // If it is not expanded now, then animate the max-height to the natural 
     // height as stored in data, then add the 'expanded' class 
     $story.animate({'maxHeight': $story.data('natural')}, duration); 
     $story.addClass('expanded'); 
     } 
    }); 

    })(); // end anonymous, self-executing function 

}); 

a hacer lo mismo con las imágenes, sólo les envuelva en una combinación externa div, que es en lo que configurará max-height y overflow:hidden, tal como utilicé div.story anteriormente.

+0

BTW, scrollHeight is always disponible, para que no necesite almacenarlo en caché en los campos de "datos". – PF4Public

1

solución CSS puro

HTML

<div>max-height element</div> 

css

div { 
    max-height:20px; 
    overflow:hidden; 

    -moz-transition: 1s; 
    -ms-transition: 1s; 
    -o-transition: 1s; 
    -webkit-transition: 1s; 
    transition: 1s;} 

div:hover { 
    max-height:300px} 

DEMO

disfrutar!

1

Me encontré con lo mismo.

La respuesta es utilizar "maxHeight" en lugar de "max-height" ...

+2

Ambos 'maxHeight' y' "max-height" 'funcionarán en las versiones más recientes de jQuery. http://jsfiddle.net/9jswu7L6/1/ – apaul

+0

La pregunta parece estar pidiendo una forma de animar la altura máxima con versiones anteriores de jQuery. http://jsfiddle.net/9jswu7L6/2/ – apaul

+0

@ apaul34208 Leí la pregunta dos veces, no se menciona la versión de jQuery. Aunque, estoy de acuerdo en que en las versiones anteriores, tendría que haber algún tipo adicional de ajuste para que esto funcione (también, la pregunta original fue fechada en 2010, pero se actualizó este año). – rfornal

Cuestiones relacionadas