Question

Je construis une page où je veux utiliser le script Galleria ( http://devkick.com/ laboratoire / galleria / ) et jQuery du widget Accordéon pour cacher catégories différentes loin des vignettes de la galerie. Dans mon initialisation je l'ai écrit comme suggéré par les manuels des deux scripts:

<script type="text/javascript">
        jQuery(function($) { 
        $('ul.gallery').galleria({
         insert: "#image"
        });

         $("#thumbs").accordion();

        });
</script>

La fonction galleria() crée des vignettes et attribue des tailles appropriées pour eux. Ensuite, la fonction accordion() attribue ses styles et affaisse les éléments qui sont actuellement invisibles. Avec le code ci-dessus, j'ai un problème avec quelques images miniatures deviennent invisibles en raison d'avoir zéro dimensions.

Si je mets des alertes avant que les vignettes sont attribuées leur taille en fonction galleria(), je peux voir que pour les images qui sont à l'intérieur des pages invisibles de l'accordéon, leur contenant a zéro dimensions à ce moment-là. Cela est très étrange pour moi parce que je pensais que ces fonctions consécutivement exécuter et accordion() ne sont pas appelés avant galleria() a fini.

De plus étrange, si je mets une alerte avant que la fonction d'accordéon, puis tout est traité dans l'ordre correct.

Il est évident que je suis face à une condition de course ici. Pourquoi se fait-il et que dois-je faire pour garantir une séquence d'initialisation ordonnée?

Était-ce utile?

La solution

Ceci est juste une supposition, mais je devine qu'il a quelque chose à voir avec les scripts en cours d'exécution avant que les images sont téléchargées. Cela semble expliquer pourquoi la alert() avant que la fonction d'accordéon fait les choses fonctionnent. Il donne aux images une chance de charger.

Si cela est juste, vous voulez utiliser le gestionnaire d'événements load() de jQuery pour faire en sorte que les images sont à pleine charge.

Documents de chargement (): http://api.jquery.com/load-event/

Autres conseils

Je suppose que la condition de la course pourrait être dans le fait que toutes les images risquent de ne pas être encore une fois téléchargé galleria les a ajoutés. Cela causerait la fonction accordian d'assumer les images sont nulles par zéro.

La raison pour laquelle l'ajout d'une alerte fonctionne est parce qu'il faut et au moment où vous fermez, les images ont téléchargé.

Si vous voulez être sûr de l'ordre d'exécution, regardez dans Firebug et console.log au lieu d'utiliser des alertes, qui ne bloquent pas l'exécution de script comme alerte fait.

En ce qui concerne votre question principale, je regarderais en voir si galleria fournit une fonctionnalité de rappel pour assurer que toutes les images sont téléchargées avant de passer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top