Bon… prenons les problèmes dans l'ordre alors car j'ai l'impression d'avoir raté une marche.
Pour retarder l'affichage: Tu peux pas. L'affichage se fait quand il est demandé ni plus ni moins, ce que tu peux faire en revanche c'est retarder la demande d'affichage… le truc c'est que c'est pas toujours évident de déterminer ce qui justement provoque l'affichage, honnêtement je pige pas totalement le code js que tu as donné mais j'aurai tendance à dire que c'est elem.click();
à la ligne 45.
Pour le camouflage… bon là je comprend parfaitement ce que tu veux dire… déjà pour le principe comment sa marche.
La première étape c'est lorsque l'on sais que l'on va avoir un traitement long c'est de mettre en place une animation (ou bêtement une image) avant de commencer ton traitement long.
Une fois fais tu exécute ton traitement long qui ne doit rien afficher à l'écran pendant son déroulement. Une fois le traitement terminé (ce traitement peut appeler une procédure de callback) là on remplace l’animation de chargement par le résultat.
Ton problème est que toi, tu veux afficher le résultat quelque par pour justement pouvoir mesurer la largeur (je continue de penser que c'est un mauvais plan de bataille mais faudrait que j'analyse vraiment de bout en bout ce que tu souhaite faire et surtout que j'aille lire les doc des dépendances que tu utilise. Du coup je vais te laisser juger).
La solution c'est de créé un div quelque par hors du flux (css position absolute) et hidden (pour pas que sa se voie à l'écran). Tu joue tes différentes animation qui du coup ne seront pas visible, tu mesure ce que tu as besoin de mesurer, et une fois ce que as fini tu déplace le contenu de ce div caché là ou tu souhaite réellement afficher ton accordéon.