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 :

Le canvas n'est pas trouvé sur ma page HTML [API HTML5]


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Par défaut Le canvas n'est pas trouvé sur ma page HTML
    Salut

    J'ai un petit problème simple mais bizarre je ne trouve pas la solution : Le canvas semble ne pas être vu par "document.get...." oO

    La console m'affiche l'erreur : ctx indéfini quand je lance la fonction de dessin d'un carré.
    Il n'y a pas d'erreur affichée lorsque la fonction getctx() est lancée mais seulement quand la fonction de dessin est lancée.

    Mon code JS est une fonction init(), dont le début lance une fonction getctx() pour lire le context d'un canvas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function init(){
    	var ctx=getctx();
    Voilà mon code de la fonction ctx() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function getctx(){
    			alert("ok");
    	if(document.getElementById("canvas")){
    		var canvas=document.getElementById('canvas');
    		canvas.style.width=1200+"px";
    		canvas.style.height=1200+"px";
    		var ctx=canvas.getContext("2d");
    		return ctx;
    	}
    }
    On y voit un alert() qui apparaît bien quand la fonction se lance, mais il n'apparaît pas si je déplace l'alert() juste sous la condition if().
    Ce qui signifie que le canvas n'est pas trouvé dans ma page HTML non ?
    Pourtant le canvas est bien sur ma page HTML avec l'id="canvas".

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <body>
    <canvas id="canvas"></canvas>
    </body>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Dessine un carré bleu, mais cette fonction ne fonctionne pas et j'ai l'erreur ctx indéfini.
    function bleu(x1,y1,x2,y2){
    	var ctx=getctx();
    	ctx.fillStyle="blue";
    	ctx.fillRect(x1,y1,x2,y2);
    }

  2. #2
    Membre très actif
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Par défaut
    Est-ce que mon problème viendrait du fait que je n'ai pas mis de fichier css pour le canvas ?

  3. #3
    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
    Non, ce n'est pas un problème de CSS. À ce sujet, je te déconseille de passer par style pour modifier les dimensions du canevas. Du point de vue du moteur de rendu HTML, l'élément <canvas> a un comportement semblable à celui de <img>. Comme les images, il a des attributs HTML width et height, à ne pas confondre avec les styles du même nom. As-tu déjà essayé de modifier les styles width et height d'une image ? L'image est étirée (ou comprimée), et souvent avec un algorithme d'interpolation assez pauvre. Le résultat est moche. Si tu étires ton canevas, son contenu sera déformé de la même façon.

    Morale de l'histoire : il faut modifier les attributs HTML directement. En plus, la syntaxe est plus simple :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    canvas.width = 1200;
    canvas.height = 1200;

    Concernant ton problème, je pense que c'est simplement ta fonction init() qui est appelée trop tôt, alors que le DOM n'est pas construit. C'est un problème classique. Pour corriger ça, place ta balise <script> juste avant </body>, ou alors utilise document.addEventListener("DOMContentLoaded", …).

    Conseil : pour mieux localiser tes erreurs, tu peux ajouter du code de sécurité, des throw qui indiquent quand quelque chose ne va pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function getctx(){
    	if(document.getElementById("canvas")){} else {
    		throw new Error("canvas introuvable :x");
    	}
    }
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre très actif
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Par défaut
    Merci beaucoup Watilin pour tes conseils éclairés !

    Pourtant j'avais mis ce code pour attendre que la page soit chargée :
    C'est bizarre, je vais suivre tes conseils déjà on verra après

  5. #5
    Membre très actif
    Homme Profil pro
    rien
    Inscrit en
    Décembre 2015
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 282
    Par défaut
    J'ai regardé cette page :
    http://javascript.info/tutorial/onlo...mcontentloaded

    Ils disent qu'avec Firefox y a problème avec ondomcontentloaded je crois non ?
    Je sais pas si je comprend mal la page ou pas.

    Du coup je suis bloqué si je veux pas mettre de script dans le body.

    Mais c'est bizarre quand même car la méthode d'appel que j'ai utilisé fonctionne dans un autre programme.

    Un window.onload qui appelle une fonction init() qui se charge d'appeler le lecteur de context du canvas. (tout comme j'ai fait).

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    peut être que si tu nous mettais tout ton code on y verrait plus clair dans l'ordre d'appel et à quoi te servent ces multiples var ctx.

  7. #7
    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
    Ah bien vu Eric2a, j'étais en train de me creuser la tête

    Citation Envoyé par progdebutant Voir le message
    J'ai regardé cette page :
    http://javascript.info/tutorial/onlo...mcontentloaded

    Ils disent qu'avec Firefox y a problème avec ondomcontentloaded je crois non ?
    Je sais pas si je comprend mal la page ou pas.
    Ils disent simplement que Firefox ne remplit pas automatiquement les champs de formulaire avant cet évènement. Ça ne nous concerne pas dans le cas présent.

    Sinon j'aime bien ton test de parité avec Math.round, je le trouve astucieux
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

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

Discussions similaires

  1. Fichier .jar sur serveur n'est pas trouvé
    Par Chavadam dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 18/06/2014, 13h26
  2. Le css n'est pas dispo mais la page html en contient !
    Par mappy dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 29/07/2006, 11h37
  3. [information] utiliser des "dessins" si le fichier image n'est pas trouvé
    Par TabrisLeFol dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 25/05/2006, 12h05
  4. [ImageMagick] imagettftext, ma police n'est pas trouvée
    Par beho dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 21/12/2005, 16h08
  5. [XSD] le schéma xsd n'est pas trouvé!
    Par cpicass dans le forum Valider
    Réponses: 5
    Dernier message: 09/06/2005, 10h48

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