jQuery Accordéon: les questions d'animation

mise à Jour

je vais faire un wiki de la communauté, et ce pour trois raisons:

  • je n'ai pas envie, j'ai obtenu une réponse définitive, mais
  • j'ai depuis longtemps cessé d'avoir besoin d'une réponse, parce que j'ai roulé ma propre accordéon fonction
  • cette question reçoit des tonnes de points de vue, donc clairement, beaucoup de gens sont toujours intéressés

Donc, si quelqu'un veut modifier/clarifier cette question et d'en faire un guide définitif, mon invité.


je travaille sur une page en utilisant jQuery accordéon élément UI. J'ai modelé mon HTML sur cet exemple, sauf que dans le <li> éléments, j'ai des listes non ordonnées de liens. Comme ceci:

  $(document).ready(function() {
     $(".ui-accordion-container").accordion(
        {active: "a.default", alwaysOpen: true, autoHeight: false}
     );
  });

  <ul class="ui-accordion-container">
  <li> <!-- Start accordion section -->
   <a href='#' class="accordion-label">A Group of Links</a>
   <ul class="linklist">
      <li><a href="http://example.com">Example Link</a></li>
      <li><a href="http://example.com">Example Link</a></li>
   </ul>

   <!--and of course there's another group -->

Problème: c'est à dire l'Animation pue

bien que IE7 Anime très bien le menu accordéon de la documentation, il a des problèmes avec le mien. Spécifiquement, un menu accordéon sur la page se déplace saccadé et a des flashs de contenu. je sais que ce n'est pas un problème CSS parce que la même chose se produit si je n'inclus pas mes fichiers CSS.

l'autre menu accordéon de la page ouvre la première section que vous cliquez et, après cela, ne s'ouvre pas.

ces deux problèmes sont spécifiques à IE, et tous les deux disparaissent si j'utilise l'option animated: false. Mais j'aimerais garder la valeur par défaut slide l'animation, puisqu'elle aide l'utilisateur à comprendre ce que fait le menu.

Est-il une autre façon?

17
demandé sur Nathan Long 2008-12-02 01:22:14

16 réponses

je sens ta douleur! Je suis récemment passé par un problème ridicule où j'ai tout déchiré hors de la page principale et la mise en page de la page bloc par bloc (c'était en fait SharePoint), amincissant continuellement en bas de la page.

Le résultat final a fini par être ne pas avoir un doc type pour le document html (certains développeurs l'ont supprimé). L'absence d'un doctype signifiait que IE 7 fonctionnait en mode quirks et que le CSS inline émis par L'Accordéon JQuery se comportait Funky.

Envisager d'ajouter:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

en haut de votre page maître ou document html (s'il n'y a pas déjà un doctype défini).

il y a en fait tout un site dédié au comportement des bizarreries. Vous pouvez consulter un article sur mode bizarreries ici. J' a écrit un post qui contient un peu plus d'informations sur le dépannage.

21
répondu Tyler 2009-01-28 05:15:04

même problème que tout dans IE7 avec le markup HTML standard bien formé. Ce qui a finalement fonctionné, c'est la suppression de autoHeight: "false" et en utilisant clearStyle: "true".

J'ai aussi créé une version IE < 8 de l'initialisation de l'accordéon avec:

if ( $.browser.msie && $.browser.version < 8 ) {
    //ie<8 version
}
else {
    //version for the good browsers
}
6
répondu IanI 2011-10-27 12:36:15

j'ai en fait évité d'utiliser le plugin accordéon car je l'ai trouvé un peu inflexible pour mes besoins. J'ai trouvé que l'accordéon le plus facile et le plus flexible est aussi simple que:

var accordion = function(toggleEl, accEl) {
    toggleEl.click(function() {
        accEl.slideToggle(function() { });
        return false;
    });
}

pour ton exemple que vous pouvez l'utiliser comme ceci:

$(document).ready(function() {
    new accordion($("a.accordion-label"), $("ul. linklist"));        
});

vous pouvez l'utiliser comme un modèle et construire dans la classe CSS ajouter, callbacks et autres choses utiles, mais j'ai trouvé qu'à la fin il était beaucoup plus facile de le faire de cette façon que de dick autour avec l'accordéon plugin.

EDIT: Exemple de code avec une fonction de rappel

var accordion = function(toggleEl, accEl, callback) {
    toggleEl.click(function() {
        accEl.slideToggle(callback);
        return false;
    });
}

$(document).ready(function() {
    new accordion($("a.accordion-label"), $("ul. linklist"), function() { /* some callback */ });        
});
5
répondu Darko Z 2008-12-02 01:25:15

a Couru dans la même question, mais cette fixe pour IE 6 et 7:

$().ready(function(){
  $(".ui-accordion-header").click(function() {
    $(this).next().fadeIn();
  });
)};

je pense que cela rend la glissade plus agréable de toute façon...

2
répondu Schulty 2009-02-02 17:18:02

j'ai un problème similaire, et je le corrige en ajoutant ce type de doc. Et cela fonctionne à la fois dans IE et FF

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >
2
répondu Ben 2009-06-02 01:50:12

changez vos étiquettes d'ancrage en étiquettes de portée. Je rencontrais le même problème et qui a bien fonctionné. Il en va de même pour les étiquettes DIV, C'est-à-dire les trips lorsque ceux-ci sont dans l'accordéon pour une raison quelconque. Position: Absolute may also freak out, fyi

1
répondu Josh 2009-02-01 22:11:48

j'utilise JQuery 1.4 et j'ai trouvé

<!DOCTYPE html>

est ok pour IE6, Chrome aussi.

1
répondu andy 2010-04-03 07:33:01

j'ai en fait trouvé l'opposition de Sébastien - j'ai eu min-heights sur les DIVs de contenu interne qui causaient l'animation saccadée. Je les ai enlevées et les choses se sont améliorées. Mais je ne sais pas comment cela interagit avec autoheight - selon la syntaxe, la mienne est définie à "false", mais mon accordéon semble définitivement ignorer cela...

1
répondu chrisyakimov 2011-02-14 18:21:36

dans options, vous devez définir:

 navigation: true
0
répondu Pim Jager 2008-12-01 22:38:43

il suffit de remplacer 'autoHeight: false' par 'autoHeight: true'.

0
répondu 2009-03-29 08:36:50

ayant des problèmes similaires, et je remarque que quelques personnes suggèrent de regarder des doctypes. Je viens d'essayer de voir le site actuel jQuery UI et leur travail de démonstration accordéon très bien dans ie6, suggérant qu'il un problème avec mon code (plus de travail de détective pour moi). Mais je remarque aussi que le jquery.UI sites doctype est tout simplement <!DOCTYPE html>

0
répondu nedlud 2009-07-24 06:43:51

j'ai expérimenté le même problème et après un certain temps de jouer autour de moi, j'ai découvert que si vous avez un élément contenu à l'intérieur de votre div principal avec positionnement relatif, il va causer à IE d'ouvrir l'accordéon "jerky". Voici ce que je faisais...

<div id="accordion">

  <h3 class="oneLine">Asylum</h3>

  <div class="serviceBlockContent">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sed augue a enim convallis facilisis. Aenean eu ullamcorper nulla. Ut id urna quis augue bibendum commodo et a quam.</p>
  </div>

</div>

j'ai eu la position de l'élément H3 réglée à relative et cela a causé une rupture dans IE. Espérons que cela est utile.

0
répondu user198538 2009-10-29 00:07:29

j'avais un problème où le div sous mon entête dans l'accordéon, qui avait un fond blanc sur un fond de page bleue, avait son fond-couleur disparaissant. Parfois, lorsque vous survolez un autre élément d'en-tête, il apparaît; parfois, lorsque vous mettez du texte en surbrillance, il apparaît à nouveau. C'était très étrange et ça N'arrivait qu'en IE7.

appliquer zoom: 1; cibler seulement IE7 sur l'ui - div contenu corrigé cela.

j'espère que ça aide quelqu'un parce que je je viens de passer plusieurs heures à essayer de suivre cela.

0
répondu Joe Sepi 2009-12-17 21:47:46

Essayez d'utiliser ceci:

{active: "a.default", alwaysOpen: "true", autoHeight: "false"}

au lieu de:

{active: "a.default", alwaysOpen: true, autoHeight: false}

Explorer a des problèmes avec ce genre de syntaxe.

0
répondu Menachem Almog 2010-02-10 19:52:40

j'ai eu un problème similaire avec un accordéon dans IE6 et IE7 où je n'utilisais pas la structure HTML par défaut pour l'accordéon. Assez étrangement, fixer la taille horizontale des éléments accordéon à un certain nombre de pixels a résolu les problèmes de l'animation accordéon. Pourquoi? Je ne sais pas. Mais j'ai observé que les problèmes étaient spécifiques à l'utilisation de l'autoHeight: true et les problèmes se sont produits à la fin de l'animation où je suppose que la hauteur des éléments de l'accordéon est réinitialisée. Et nous savons tous QU'il ne peut pas faire de maths.

0
répondu Aaron 2010-06-28 19:35:01

il suffit de changer autoHeight: falseautoHeight: true -- > ça a marché pour moi, mais ce n'était pas ce que je voulais...

Trouver que le fait de mettre min-height pour IE7 résolu le problème.

0
répondu sebastien 2011-12-29 09:54:32