IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

quand est lancé l'événement "onload"


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut quand est lancé l'événement "onload"
    Bonjour,

    je souhaite exécuter une fonction javascript dès qu'une image est chargée, ni avant, ni pendant le chargement... Je pense donc qu'il faut utiliser l'événement "onLoad". Mais suis-je assuré que ce dernier ne sera lancer qu'une fois le chargement terminé ? Ou bien se lance t-il dès que le chargement débute ?

    Merci d'avance pour votre attention.

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Salut,
    j’ai péché ça dans le code de jQuery :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // Mozilla, Opera and webkit nightlies currently support this event
    if ( document.addEventListener ) {
    	// Use the handy event callback
    	document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
     
    	// A fallback to window.onload, that will always work
    	window.addEventListener( "load", jQuery.ready, false );
     
    // If IE event model is used
    } else if ( document.attachEvent ) {
    	// ensure firing before onload,
    	// maybe late but safe also for iframes
    	document.attachEvent("onreadystatechange", DOMContentLoaded);
     
    	// A fallback to window.onload, that will always work
    	window.attachEvent( "onload", jQuery.ready );
    L’event moderne, qui ne marche pas encore partout, c’est DOMContentLoaded. Sous IE, on a un mécanisme qui rappelle furieusement les objets requêteurs en Ajax : onreadystatechange.

    Mais visiblement, il reste une chance de passer entre les mailles du filet, auquel cas on se rabat sur l’évènement load.

    C’est le mécanisme utilisé pour la fonction .ready, habituellement utilisée sur document, mais je sais qu’elle marche sur tout type d’objet HTML.

    Voilà, j’ai pas testé donc désolé de pas pouvoir te donner plus de détails… Bon courage !

    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut
    Merci !

    Je vais regarder tout ça d'un peu plus près demain... j'ai ma dose de code pour aujourd'hui. Si au détour d'un test j'ai des infos intéressantes je viendrai les ajouter à la discussion.

    Ciao

  4. #4
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Euh non attends, j’avais mal compris ta question !
    C’est bien l’évènement load qui fait ce dont tu as besoin : il est déclenché une fois que le chargement est terminé.

    Quant au DOMContentLoaded, je n’arrive à le faire marcher que sur window… (sous FF 3.6)

    Fichiers attachés Fichiers attachés
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Zbouirf Voir le message
    je souhaite exécuter une fonction javascript dès qu'une image est chargée, ni avant, ni pendant le chargement... Je pense donc qu'il faut utiliser l'événement "onLoad".
    Pas tout à fait : si ton image est déjà dans le cache du navigateur, tu n'auras jamais le onload

    Il faut donc coupler un test sur le complete de l'image.
    http://javascript.developpez.com/faq...argementImages
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut
    Merci bien à vous deux !

    Je crois qu'avec ça je vais m'en sortir.

    Bovino : une telle boucle n'est elle pas gourmande en ressources ? Peut on ajouter un delay ou une pause entre chaque itération ?

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Normalement non, car il y a au final très peu de traitement. Mais c'est vrai que cela dépend aussi du nombre et du poids des images à tester. Tu peux effectivement passer par un timer du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var timer = setIntervalfunction(){
        compteur = 0;
        for(i=0; i<total; i++){
            if(document.getElementsByTagName('img')[i].complete){compteur++;}
        }
        if(compteur==total){clearInterval(timer);timer=null;}
    }, 25);
    Pour info, 25ms est la valeur estimée minimale pour pouvoir considérer le délai de répétition fiable.

    PS : je viens de me rendre compte que dans la FAQ, je parle d'attribut complete... il s'agit bien d'une propriété et non d'un attribut, je rectifie...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut
    Salut Bovino,

    Je ne suis pas sur de bien comprendre ton code...
    Mon idée était de mettre un timer dans la boucle "while" de ton tuto, du style (le "delay" après la boucle "for") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    window.onload=function(){
      var compteur = 0, i;
      var total = document.getElementsByTagName('img').length;
      while(compteur!=total)
      {
        compteur = 0;
        for(i=0; i<total; i++)
        {
          if(document.getElementsByTagName('img')[i].complete)
          {
            compteur++;
          }
        }
        delay (25);
      }
      alert('Toutes les images sont chargées !');
    }
    Ceci afin de rendre un peu la main pour les autres fonctions et programmes en cours et d'éviter de voir l'utilisation du processeur monter vertigineusement pendant le chargement de la page...

Discussions similaires

  1. Redemarrage quand IE est lancé
    Par kitiss dans le forum Windows XP
    Réponses: 2
    Dernier message: 01/09/2006, 00h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo