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 :

Preload images à implémenter sur site mal concu


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2005
    Messages : 10
    Par défaut Preload images à implémenter sur site mal concu
    Salut tout le monde,

    voilà, je dois implémenter un preload d'images.

    Le site est en Php. La liste des images à preloader est un tableau définit dans un script Php appelé via un include, placé après le body de la page index.php (en gros, en fonction de chaque rubrique du site, un include est effectué pour charger le script php qui va générer le contenu).

    Donc pour ma page X, j'ai un tableau de variables contenant les noms de fichier des images, placé dans le body.

    Il y a 10 images affichées de manière standards dans des liens. 10 autres images, utilisées pour le rollover (onMouseOver) doivent être préloadés via une fonction javascript.

    Je prévois d'utiliser cette fonction

    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
    19
    20
     
     
        <SCRIPT language="JavaScript">
     
        if (document.images)
        {
          preload_image_object = new Image();
          // set image url
          image_url = new Array();
          image_url[0] = "http://mydomain.com/image0.gif";
          image_url[1] = "http://mydomain.com/image1.gif";
          image_url[2] = "http://mydomain.com/image2.gif";
          image_url[3] = "http://mydomain.com/image3.gif";
     
           var i = 0;
           for(i=0; i<=3; i++) 
             preload_image_object.src = image_url[i];
        }
     
        </SCRIPT>
    Mes intérrogations :

    - Ma fonction javascript doit être générique. Je ne peux pas redéfinir le tableau qui comprend les noms des fichiers dans ma fonction JS. Je dois trouver un moyen d'envoyer mon tableau de variable généré dans le body à ma fonction JS (qui sera dans le header logiquement ?).

    - Comme mentionné à la fin du point précédent, je m'intérroge dans la manière d'implémenter ma fonction javascript afin qu'elle soit prise en compte correctement au chargement de la page. Doit-elle obligatoirement être placée dans le HEAD ? Est-ce que je pourrais la définir dans le fichier appelé par l'include, dans la balise body ? Mais ensuite, si dans le <body onload="appel_de_ma_fonction_js();"/>, qui est avant la définition de cette dernière, cela ne va pas fonctionner ?

    Je ne sais pas si j'ai exposé mon soucis de manière clair. N'hésitez pas à me demander des éclaircissements.

    Merci d'avance à ceux qui ont pris le temps de me lire.

  2. #2
    Membre expérimenté Avatar de k1rby
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 181
    Par défaut
    Bonjour, si je peux me permettre, ton code n'est pas bon. Je m'explique tu fais une boucle de preload_image_object.src = image_url[i]; mais tu n'attends pas que l'image soit chargée avant de passer à la suivante (le for n'est malheureusement pas intelligent et ne vas pas attendre que l'image soit chargée pour passer à la suivante). Du coup seul la dernière URL sera préloadée.

    Une solution :
    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
     
    function essai(){
    	preload_image_object=new Image();
    	image_url = new Array();
    	image_url[0]='http://www.smashbros.com/fr/characters/images/kirby/kirby.jpg';
    	image_url[1]='http://www.absoluteanime.com/kirby/cook_kirby.gif';
    	image_url[2]='http://www.freewebs.com/nintendogamerheaven/Kirby.jpg';
    	var i=0;
    	function imgLoaded(i){
    		i++;
    		preload_image_object.src=image_url[i];
    		if(i<image_url.length-1){
    			preload_image_object.onload=imgLoaded(i);
    		}
    	}
    	preload_image_object.src=image_url[i];
    	preload_image_object.onload=imgLoaded(i);
    }
    On charge une première image, une fois chargée, on charge la suivante s'il y en a une, une fois chargée, on charge la suivant s'il y en a une, etc.

    Sinon pour placer le code, je te proposerai de le mettre juste avant le </body> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <script type="text/javascript">
    //la fonction
    </script>
    </body>
    De cette manière le code sera chargé après le chargement de la page : le navigateur interprétant le code le code au fur et à mesure, il lira et affichera d'abord toute la page et seulement au moment d'atteindre la fin (le </body>) lira ton code de préchargement.

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    pourquoi ne rediges tu pas le preload directement avec php si tu as l'array coté serveur ???
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre expérimenté Avatar de k1rby
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 181
    Par défaut
    Euuuh, je vais peut être dire une connerie mais à priori il veut que les images se préchargent dans le cache du navigateur, côté client, pas sur le serveur (on s'en fout que le serveur préload les images chez lui ^^ ).

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    je confirme tu as bien dit une connerie ^^

    preload = forcément coté client !
    c'est une ineptie de parler de preload sur le serveur
    preload = mise en memoire (cache) des images au moment du chargement de la page

    je proposait juste de demander à php de rediger son script de preload vu qu'a priori il a les infos coté serveur

    il suffirait d'un boucle php pour generer le script javascript ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre expérimenté Avatar de k1rby
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 181
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    je confirme tu as bien dit une connerie ^^

    preload = forcément coté client !
    c'est une ineptie de parler de preload sur le serveur
    preload = mise en memoire (cache) des images au moment du chargement de la page
    Ben c'est ce que j'ai dit

    Sinon oui, je suis d'accord avec toi sur le fait que PHP doit écrire le script (en tout cas les url)

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    là:
    (on s'en fout que le serveur préload les images chez lui ^^ ).
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Je viens de tester la méthode du onload, toutes les images ont essayé de se charger en même temps. Erreur de ma part, ou comportement normal?

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    faire un preload sur un onload ?
    quel interet ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    Sur le onload de l'image. Au lieu de tester le la propriété complete k1rby exécute la fonction au onload de l'image.

  11. #11
    Membre expérimenté Avatar de k1rby
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 181
    Par défaut
    Citation Envoyé par franculo_caoulene Voir le message
    Je viens de tester la méthode du onload, toutes les images ont essayé de se charger en même temps. Erreur de ma part, ou comportement normal?
    Si tu as ça en testant ma solution, tout à fait normal. En fait elles ne se chargent pas toutes en même mais l'une après l'autre, ce qui est tout à fait normal (puisque le but est de les précharger)

    @SpaceFrog : on est on ne peut plus d'accord, mais j'ai du mal m'exprimer d'où incompréhension

  12. #12
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    J'avais adapté ta solution, quand je lance la tienne firebug retourne une erreur
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
       <title></title>
       <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
       <style type="text/css">
       </style>
    </head>
    <body>
      <script type="text/javascript">
    function essai(){
    	preload_image_object=new Image();
    	image_url = new Array();
    	image_url[0]='http://www.smashbros.com/fr/characters/images/kirby/kirby.jpg';
    	image_url[1]='http://www.absoluteanime.com/kirby/cook_kirby.gif';
    	image_url[2]='http://www.freewebs.com/nintendogamerheaven/Kirby.jpg';
    	var i=0;
    	function imgLoaded(i){
    		i++;
    		preload_image_object.src=image_url[i];
    		if(i<image_url.length-1){
    			preload_image_object.onload=imgLoaded(i);
    		}
    	}
    	preload_image_object.src=image_url[i];
    	preload_image_object.onload=imgLoaded(i);
    }
    essai();
      </script>
    </body>
    </html>
    [edit] j'ai une erreur javascript mais ça charge bien les images.

  13. #13
    Membre expérimenté Avatar de nod__
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 176
    Par défaut
    manquerais pas une fonction dans le tas des fois ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    preload_image_object.onload = function () {
        imgLoaded(i);
    };

  14. #14
    Membre expérimenté Avatar de k1rby
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 181
    Par défaut
    @nod_: Non ça marche très bien comme ça (testé chez moi sans problème ).

    @franculo_caoulene :L'erreur vient d'ailleurs, j'ai copié/collé le code que tu as posté, aucune erreur javascript n'apparaît.

  15. #15
    Membre expérimenté Avatar de nod__
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 176
    Par défaut
    T'as mal testé

    onload doit être une fonction. or imgLoaded(); ne renvoie pas de fonction. Avec le code copier, coller plus haut, les images ne se chargent même pas chez moi. Si je rajoute function () {} il y a bien chargement des images

Discussions similaires

  1. [images]upload sur site
    Par matrix788 dans le forum Wiki
    Réponses: 2
    Dernier message: 02/03/2009, 22h57
  2. [Compatibilité]Utilisation d'images .png sur un site web
    Par Loki13 dans le forum Webdesign & Ergonomie
    Réponses: 3
    Dernier message: 23/03/2007, 16h22
  3. faire tomber des images différentes sur un site
    Par jrnb58 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 27/11/2006, 12h30
  4. [Traitement d'image] photos sur un site
    Par Petogaz dans le forum Webdesign & Ergonomie
    Réponses: 3
    Dernier message: 13/04/2006, 11h49
  5. Images n'apparaissent sur site perso chez Free
    Par kcizth dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 01/02/2006, 12h35

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