Je veux animer un <div>
de 200px
à auto
hauteur. Je n'arrive pas à le faire fonctionner cependant. Quelqu'un sait-il comment?
Voici le code:
$("div:first").click(function(){
$("#first").animate({
height: "auto"
}, 1000 );
});
javascript
jquery
html
css
jquery-animate
Daniel
la source
la source
Réponses:
Enregistrez la hauteur actuelle:
Basculez temporairement la hauteur sur auto:
Obtenez la hauteur automatique:
Revenez à
curHeight
et animez versautoHeight
:Et ensemble:
la source
.animated({height: autoHeight}, 1000, function(){ el.height('auto'); });
opacity: 0; position: absolute;
tout en le mesurant et en les supprimant une fois que vous avez terminé.IMO, c'est la solution la plus propre et la plus simple:
Explication: Le DOM sait déjà, à partir de son rendu initial, quelle taille aura le div étendu lorsqu'il est défini sur hauteur automatique. Cette propriété est stockée dans le nœud DOM sous la forme
scrollHeight
. Nous devons juste récupérer l'élément DOM de l'élément jQuery en appelantget(0)
et ensuite nous pouvons accéder à la propriété.L'ajout d'une fonction de rappel pour régler la hauteur sur auto permet une plus grande réactivité une fois l'animation terminée (crédit chris-williams ):
la source
clientHeight
, qui ne semble pas être pris en charge: developer.mozilla.org/en-US/docs/Web/ API / Element.clientHeight$('#first').animate({ height: $('#first').get(0).scrollHeight }, 1000, function() { $(this).height('auto'); });
scrollWidth
animations de largeur.C'est fondamentalement la même approche que la réponse de Box9 mais je l'ai enveloppé dans un joli plugin jquery qui prend les mêmes arguments qu'une animation régulière , lorsque vous avez besoin d'avoir des paramètres plus animés et que vous en avez assez de répéter le même code encore et encore :
modifier: chaînable et plus propre maintenant
la source
Une meilleure solution ne reposerait pas sur JS pour définir la hauteur de votre élément. Voici une solution qui anime un élément de hauteur fixe à la hauteur complète ("auto"):
https://gist.github.com/2023150
la source
height
une valeur fixe (par exemple 122px). Mon élément a changé de hauteur après un certain temps, j'ai donc dû remplacer l'argument de durée (400) par des options{duration: 400, complete: function() {$selector.css('height', 'auto');}}
cela fonctionne et c'est plus simple que les solutions avant:
CSS:
JS:
Remarque: cette solution nécessite l'interface utilisateur jQuery
la source
.addClass
et.removeClass
?la source
Vous pouvez toujours envelopper les éléments enfants de #first et enregistrer la hauteur de l'enveloppe en tant que variable. Ce n'est peut-être pas la réponse la plus jolie ou la plus efficace, mais elle fait l'affaire.
Voici un violon où j'ai inclus une réinitialisation.
mais pour vos besoins, voici la viande et les pommes de terre:
la source
Utiliser slideDown et slideUp
la source
J'ai réussi à résoudre le problème: voici le code.
la source
Vous pouvez rendre la réponse de Liquinaut sensible aux changements de taille de fenêtre en ajoutant un rappel qui redéfinit la hauteur sur auto.
la source
Fondamentalement, la hauteur automatique n'est disponible pour vous qu'une fois l'élément rendu. Si vous définissez une hauteur fixe, ou si votre élément n'est pas affiché, vous ne pouvez pas y accéder sans astuces.
Heureusement, vous pouvez utiliser quelques astuces.
Clonez l'élément, affichez-le en dehors de la vue, donnez-lui une hauteur automatique et vous pouvez le retirer du clone et l'utiliser plus tard pour l'élément principal. J'utilise cette fonction et semble bien fonctionner.
USAGE:
la source
vous pouvez toujours faire ceci:
voici un violon: http://jsfiddle.net/Zuriel/faE9w/2/
la source
.appendTo("body")
par.appendTo(el.parent())
Vos sélecteurs ne semblent pas correspondre. Votre élément a-t-il un ID de «premier», ou est-ce le premier élément de chaque div?
Une solution plus sûre serait d'utiliser «ceci»:
la source
$(this)
dans votre gestionnaire de clics.animate({height: 'auto'})
n'a aucun effet. Du moins, pas avec jQuery 1.6.4.Essaye celui-là ,
la source
En voici un qui fonctionne avec BORDER-BOX ...
Salut les gars. Voici un plugin jQuery que j'ai écrit pour faire de même, mais aussi pour tenir compte des différences de hauteur qui se produiront lorsque vous aurez
box-sizing
définiborder-box
.J'ai également inclus un plugin "yShrinkOut" qui cache l'élément en le rétrécissant le long de l'axe y.
Tous les paramètres que j'ai utilisés peuvent être omis ou définis sur null afin d'accepter les valeurs par défaut. Les paramètres que j'ai utilisés:
la source
Basculer la diapositive ( réponse de Box9 développée)
la source
Je poste cette réponse même si ce fil est ancien. Je n'ai pas pu obtenir la réponse acceptée pour moi. Celui-ci fonctionne bien et est assez simple.
Je charge la hauteur de chaque div que je veux dans les données
Ensuite, je l'utilise simplement lors de l'animation par clic.
J'utilise la transition CSS, donc je n'utilise pas l'animation jQuery, mais vous pouvez faire de l'animation tout de même.
la source
vous pouvez le stocker dans un attribut de données.
la source
J'avais besoin de cette fonctionnalité pour plusieurs zones de lecture supplémentaires sur une page, l'implémentant dans un shortcode Wordpress, j'ai rencontré le même problème.
Concevez techniquement toutes les travées en lecture plus sur la page ont une hauteur fixe. Et je voulais pouvoir les étendre séparément à une hauteur automatique avec une bascule. Premier clic: "développer à la hauteur totale de la zone de texte", deuxième clic: "réduire à la hauteur par défaut de 70px"
HTML
CSS
Donc au-dessus de cela semble très simple le
data-base
attribut dont j'ai besoin pour définir la hauteur fixe nécessaire. L'data-height
attribut que j'ai utilisé pour stocker la hauteur réelle (dynamique) de l'élément.La partie jQuery
J'ai d'abord utilisé une fonction clickToggle pour mon premier et mon deuxième clic. La deuxième fonction est plus importante:
setAttr_height()
tous les.read-more
éléments ont leur hauteur réelle définie lors du chargement de la page dans lebase-height
attribut. Après cela, la hauteur de base est définie via la fonction jquery css.Avec nos deux attributs définis, nous pouvons maintenant basculer entre eux de manière fluide. Seulement changer le
data-base
à votre choix (fixe) hauteur et passer le plus .read-classe pour votre propre IDVous pouvez tous le voir fonctionner dans un violon FIDDLE
la source
Si tout ce que vous voulez est d'afficher et de masquer, disons un div, alors ce code vous permettra d'utiliser jQuery animate. Vous pouvez demander à jQuery d'animer la majorité de la hauteur que vous souhaitez ou vous pouvez tromper l'animation en animant à 0px. jQuery a juste besoin d'une hauteur définie par jQuery pour le convertir en auto. Ainsi, le .animate ajoute le style = "" à l'élément que .css (height: auto) convertit.
La façon la plus propre que j'ai vu ce travail est de l'animer à environ la hauteur que vous attendez, puis de le laisser définir automatiquement et cela peut sembler très transparent lorsqu'il est bien fait. Vous pouvez même animer au-delà de ce que vous attendez et cela se rétablira. L'animation à 0px à une durée de 0 laisse simplement tomber la hauteur de l'élément à sa hauteur automatique. Pour l'œil humain, il a l'air animé de toute façon. Prendre plaisir..
Désolé, je sais que c'est un ancien message, mais j'ai pensé que cela serait pertinent pour les utilisateurs recherchant cette fonctionnalité toujours avec jQuery qui rencontrent ce message.
la source
J'ai mis en place quelque chose qui fait exactement ce que je cherchais et qui a fière allure. L'utilisation de scrollHeight d'un élément vous donne la hauteur à laquelle il a été chargé dans le DOM.
la source