Bonjour,

Je voudrais vous demander s'il est possible de demander au code javascript du menu déroulant, de masquer le dit menu avant d'avoir fini de charger le reste de la page.
Je m'explique: il suffit que quelqu'un ai une connection lente ou que la page comporte beaucoup d'images pour que le menu déroulé encombre l'écran.

Pour rappel, le code code de base est:


<script type="text/javascript">
<!--
window.onload=montre;
function montre(id) {
var d = document.getElementById(id);
	for (var i = 1; i<=10; i++) {
		if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
	}
if (d) {d.style.display='block';}
}
//-->
</script>


merci d'avance
tu as constaté le probleme?

car vois-tu c'est la propriété onload qui se declenche que quand la page est completement chargé.

hors je lis

window.[b]onload[/b]=montre;
function montre(id) {
var d = document.getElementById(id);
	for (var i = 1; i<=10; i++) {
		if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
	}
if (d) {d.style.display='block';}
}


je ne penses que le pb existera.

mais sinon tu peux peut-être essayer de precharger tes images avec javascript.
Modifié par CPascal (13 Mar 2008 - 21:19)
Je pense que je n'ai pas tout compris:

Est-tu veux dire que c'est justement la caractéristique de "onload" de se déclencher quand la page a fini de charger?

De ce cas que dois je changer au script?
Si tu appelles montre(0) (et non montre() car alors tu utilises la fonction sans paramètres et génères une erreur !) tout en bas du body, les éléments existeront tous, et la feuille de style sera normalement chargée, donc montre() pourra cacher les menus, avant le chargement complet des images, etc... ce qui revient quasi exactement au même que window.onload. Tu peux dois pas utiliser la fonction avant que le client n'ait chargé les éléments du menu sur lesquels il influe. Si la connexion est vraiment vraiment lente, la différence se verra de la même façon.
Si j'ai bien compris il faut virer window.onload=montre; et juste appeller la fonction montre(0) en mettant un zéros entre parenthèse et placer le code tout en bas à côté de </body>

C'est bien ça?
<script type="text/javascript">montre(0 ou n'importe quoi qui ne soit pas un élément du site, mais la console d'erreur sera moins fâchée avec une fonction bien déclarée et un élément pas trouvé qu'une fonction mal déclarée et un élément pas trouvé quand même);</script>

Le menu se cachera dès que le body sera chargé, au lieu d'attendre la fin du chargement du code. Je crois que le document JS est alors déjà chargé aussi, donc ça devrait rouler, mais ça n'améliore que ridiculement peu la vitesse d'exécution, aussi te conseille-je plutôt de donner un positionnement normal (comme une vraie liste) à ton menu, et ensuite, à l'aide de JS, de le mettre en absolu à l'appel de la fonction (et d'utiliser les CSS conditionnels pour IE 6 et 7 afin de mettre dans leur CSS le positionnement absolu car ils vont mal calculer la hauteur une fois sur 2).

Je suis fatigué et je vais rentrer chez moi, je détaillerai donc demain XD