Mon expérience jQuery slideToggle()
Quelqu'un peut-il me dire pourquoi mes boîtes "sautent" quand je les ouvre? La première moitié ils glissent, le reste ils "sautent" ??
Merci, Johannes
C'est une solution simple. Ajoutez cette règle CSS à votre feuille de style ( Testé dans Firebug pour fonctionner, et de mon expérience passée avec ce problème, c'est le correctif ):
ol.message_list { position: relative }
C'est un bogue CSS, pas un bogue jQuery en tant que tel.
Ce qui m'aide, c'est
overflow: hidden
à la bascule qui ...
La solution la plus rapide dans votre cas:
.message_container { width: 361px; }
Je ne sais pas exactement pourquoi, mais ne donnant pas au conteneur une largeur fixe lorsqu'il contient un <p>
cause des problèmes, donnez-lui un et le saut disparaîtra.
css padding et jquery slideToggle ne fonctionnent pas bien ensemble. Essayez d'encadrer le rembourrage.
Si elle est définie, la propriété min-height
peut également déclencher un tel problème. Dans ce cas, vous devez le réinitialiser:
.toggle-container {
position: relative;
min-height: 0;
}
J'ai trouvé ce problème dans de nombreuses occasions dans lesquelles je n'animais que la hauteur avec slideToggle
mais pas la marge/remplissage.
Donc, quelque chose comme ceci pourrait le résoudre:
$("#thediv").slideToggle().animate({"margin-bottom": "toggle"});
Par accident, je pense que la solution la plus facile à utiliser consiste à ajouter une fonction personnalisée à jQuery avec une marge de remplissage/marge animée animée.
//this function is to avoid slideToggle jQuery jump bug.
$.fn.slideShow = function(time,easing) { return $(this).animate({height:'show','margin-top':'show','margin-bottom':'show','padding-top':'show','padding-bottom':'show',opacity:1},time,easing); }
$.fn.slideHide = function(time,easing) {return $(this).animate({height:'hide','margin-top':'hide','margin-bottom':'hide','padding-top':'hide','padding-bottom':'hide',opacity:0},time,easing); }
Et exemple d'utilisation:
$(this).slideShow(320,'easeOutQuart');
$(this).slideHide(320,'easeOutQuart');
Mon exemple tu/opacité animée bascule tu, tu peux le modifier selon tes besoins.
Je trouve que la solution la plus simple est généralement de supprimer le remplissage de l’élément qui glisse et d’ajouter du remplissage à un élément inside l’élément de glissement.
Dans cet exemple, la div avec l'attribut data-role="content"
est celle qui glisse et le remplissage est appliqué à tab-example__content
<div data-role="content" class="tab-example__content">
...
</div>
Pour corriger le glissement 'saccadé' j'ai ajouté une nouvelle div à l'intérieur de l'élément glissant et déplacé le class/padding vers celui-ci, comme suit:
<div data-role="content">
<div class="tab-example__content">
...
</div>
</div>
Il est maintenant agréable et lisse
Dans ma situation passée, j'avais le même problème, et le problème était que j'avais la déclaration transition: all 350ms;
dans mon CSS qui était en conflit avec .slideToggle
. Le fait de supprimer cela a résolu le problème pour moi, alors recherchez les transitions dans CSS.
si la boîte basculée n'a pas de hauteur par défaut, vous devez l'ajouter. Pour la hauteur automatique, ajoutez ceci:
.toggle-container {
height: auto;
}
J'ai trouvé encore une autre chose qui l'affecte. Supprimer min-height
du CSS de cet élément me l'a corrigé.
J'ai trouvé la définition d'une largeur sur le conteneur à bascule a résolu le problème pour moi
.toggle-container {
width: 100%; }
}
Je lis que slideToggle repose sur une largeur et une hauteur de départ pour fonctionner correctement. Ainsi, en fonction de votre page, vous devrez peut-être définir la largeur ou la hauteur pour obtenir le comportement que vous attendez.