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 :

Chargement image lors de la création d'un objet


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut Chargement image lors de la création d'un objet
    Bonjour, j'arrive pas à m'y faire aux objets !

    J'ai beau avoir essayé de comprendre les exemples donnés par Archimède, No Smoking, ASCIIDEFOND, et d'autres gars sympas dont j'ai plus le nom en tête, bein je suis toujours aussi nul.

    J'essaie par exemple de charger une image lors de la création d'un objet vehicule, mais le onload de l'image ne se fait pas alors qu'il possède bien son SRC.

    Code javascript : 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
    class CVehicule{
        constructor(Nom, Type, Fichier, X, Y, W, H){
            this.Nom=Nom;
    	this.Type=Type;
    	this.Image=new Image();
            this.Image.SRC=Fichier;
            this.Image.onload=function(e){
                const objImg=e.target;
                this.W=this.Image.width;
                this.H=this.Image.height;
                alert(this.W);
        }
     
    }
     
    var mavoiture=new CVehicule("Mercedes",1,"img/vehicules/taxi01.png",50,450);

    Ensuite j'ai essayé d'y ajouter une fonction Draw() mais quand je mets "this" devant la fonction vscode me donne une erreur et rien ne marche.
    Du coup je mets pas le "this" mais pour pas plus de résultats.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Draw=function(ctx){
            ctx.drawImage(this.Image,this.X,this.Y,this.W,this.H);
        }

    J'ai aussi essayé comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Draw=function(ctx,x,y,w,h){
            ctx.drawImage(this.Image,x,y,w,h);
        }

  2. #2
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 429
    Par défaut
    Bonjour,

    Il semble manquer une accolade pour fermer correctement la classe CVehicule dans ton exemple.
    La méthode onload ne semble pas être utile actuellement.
    La fonction draw() est définie dans la classe CVehicule ?

    Un exemple reproductible (complet et/ou en ligne) est souvent plus parlant.
    De ce que j'ai compris de ton code : https://jsfiddle.net/urfamn6h/

  3. #3
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Sur la première partie de ton code, il manque en effet une accolade et
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
     document.body.appendChild(this.Image);

  4. #4
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut
    Citation Envoyé par Pytet Voir le message
    Bonjour,

    Il semble manquer une accolade pour fermer correctement la classe CVehicule dans ton exemple.
    La méthode onload ne semble pas être utile actuellement.
    La fonction draw() est définie dans la classe CVehicule ?

    Un exemple reproductible (complet et/ou en ligne) est souvent plus parlant.
    De ce que j'ai compris de ton code : https://jsfiddle.net/urfamn6h/
    Merci beaucoup, je vais le voir !
    Oui la fonction draw est dans la classe CVehicule, j'ai essayé de faire comme j'ai vu sur le net, d'aprés ma compréhension du truc :/

  5. #5
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut
    Merci Archimède !
    en fait j'ai oublié l'accolade lors de la copie mais dans mon code elle y est.

    Citation Envoyé par Archimède Voir le message
    Sur la première partie de ton code, il manque en effet une accolade et
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
     document.body.appendChild(this.Image);
    ça se place à quel endroit ?
    Dans le onload() de l'image ?

    Citation Envoyé par Pytet Voir le message
    Bonjour,

    Il semble manquer une accolade pour fermer correctement la classe CVehicule dans ton exemple.
    La méthode onload ne semble pas être utile actuellement.
    La fonction draw() est définie dans la classe CVehicule ?

    Un exemple reproductible (complet et/ou en ligne) est souvent plus parlant.
    De ce que j'ai compris de ton code : https://jsfiddle.net/urfamn6h/
    Sur le lien, la voiture n'apparaît pas aussi :/

  6. #6
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Citation Envoyé par nouby Voir le message
    ça se place à quel endroit ?
    Dans le onload() de l'image ?
    Par rapport à ce que tu as écrit en dessous de this.image.src....
    Après c'est la conception de ta classe qui faudra revoir... le chargement de ton image devrait se faire dans le onload

  7. #7
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut
    Citation Envoyé par Archimède Voir le message
    Par rapport à ce que tu as écrit en dessous de this.image.src....
    Après c'est la conception de ta classe qui faudra revoir... le chargement de ton image devrait se faire dans le onload
    Merci, tu entends quoi par le onload() ? est-ce celui qui est dans la classe : this.Image.onload=function(){..}.

    En tous cas, j'ai essayé ça, pas d'affichage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            this.Image.SRC=Fichier;
            this.Image.onload=function(){
                this.W=this.Image.width;
                this.H=this.Image.height;
                document.body.appendChild(this.Image);
            }

  8. #8
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Non, je t'ai dit ici :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    this.Image=new Image();
    this.Image.src=Fichier;
    document.body.appendChild(this.Image);//<- là
    this.Image.addEventListener('load',function(e){  /* ou this.image.onload=function...*/
    const objImg=e.target;//....

  9. #9
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut
    aaah Merci !

    Et sur le lien donné plus haut de jsfiddle, il n'y a aucun onload d'image pourtant ?

    EDIT :

    Avec l'appendChild, vscode me fait une erreur :

    caught TypeError: Cannot read properties of null (reading 'appendChild')

  10. #10
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Oui, si tu ne charges pas ton fichier avant, le this.image sera indéfini, je pense. Autant pour moi. donc erreur sur this.image.onload...

  11. #11
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut
    je suis désolé, Archimède si je comprend pas, mais tu veux dire quoi, je dois faire quoi d'aprés toi pour voir apparaître mon image ?
    j'ai fais comme dans le lien jsfiddle mais moi j'ai rien qui s'affiche.

    EDIT : c'est bon j'ai affiché une image en prenant l'exemple de jsfiddle

    Merci beaucoup de votre aide, c'est vraiment génial !!!

  12. #12
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Citation Envoyé par nouby Voir le message
    je suis désolé, Archimède si je comprend pas, mais tu veux dire quoi, je dois faire quoi d'aprés toi pour voir apparaître mon image ?
    j'ai fais comme dans le lien jsfiddle mais moi j'ai rien qui s'affiche.
    En laissant ton code intact tu fais :
    Code javascript : 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
     class CVehicule{
                constructor(Nom, Type, Fichier, X, Y, W, H){
                    this.Nom=Nom;
                    this.Type=Type;
                    this.Image=new Image();
                    this.Image.src=Fichier;
                    document.body.appendChild(this.Image);
                    this.Image.onload=function(e){
                            const objImg=e.target;
                            this.W=this.Image.naturalWidth;
                            this.H=this.Image.naturalHeight;
                            alert(this.W);
                    };
                }
            }
            var mavoiture=new CVehicule("Mercedes",1,"le path de ton fichier",50,450);

    Et tu verras ton image, je te l'ai déjà dit...

  13. #13
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut
    Ah ok !
    je vais essayer comme ça aussi

  14. #14
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut
    En fait, non seulement mon code était pas bon, mais en plus j'avais mis
    this.Image.SRC= Alors que ce qui marche c'est,
    this.Image.src=.
    Une histoire de majuscules...

    Et finalement j'ai pas eu à faire le load() de l'image, je me suis servi du code donné sur jsfiddle montré plus haut dans ce topic.
    Merci encore pour vos éclaircissements qui m'ont beaucoup apporté en compréhension !!!

  15. #15
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Oui mais le src ne suffisait pas si tu ne définis pas le nœud sur body de ton image avec appendChild...
    Regarde ce tuto sur les éléments du dom...

    https://javascript.developpez.com/tu...-lignes-du-dom

  16. #16
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut
    Ok, Merci de ton lien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'affichage d'image lors de la création du package
    Par Milyshyn76 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 17/10/2016, 11h01
  2. Image lors de la création d'un PDF
    Par Anonyme5571 dans le forum NodeJS
    Réponses: 2
    Dernier message: 27/08/2015, 10h29
  3. [GD] Obtenir la grandeur de l'image lors de sa création
    Par anny dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 12/01/2009, 15h08
  4. Réponses: 6
    Dernier message: 09/03/2008, 13h12
  5. [JDOM] Erreur de DTD lors de la création d'un objet JDOM
    Par Kerod dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 24/05/2007, 13h14

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