2012-05-18 2 views
42

Salut, j'ai une question sur la création dynamique d'une toile en utilisant javascript.HTML5 Créer dynamiquement Canevas

i créer une toile comme ceci:

var canvas = document.createElement('canvas'); 
canvas.id  = "CursorLayer"; 
canvas.width = 1224; 
canvas.height = 768; 
canvas.style.zIndex = 8; 
canvas.style.position = "absolute"; 
canvas.style.border = "1px solid"; 

mais lorsque je tente de le localiser, je reçois une valeur null:

cursorLayer = document.getElementById("CursorLayer"); 

Est-ce que je fais mal? Y a-t-il une meilleure façon de créer une toile en utilisant JavaScript?

+1

double possible de [Ajouter toile à une page avec javascript] (http://stackoverflow.com/questions/9152224/add-canvas-to-a-page- avec-javascript) – Vadzim

Répondre

64

Le problème est que vous n'insérez pas votre élément canvas dans le corps du document.

Il suffit de faire ce qui suit:

document.body.appendChild(canvas); 

Exemple:

var canvas = document.createElement('canvas'); 
 

 
canvas.id = "CursorLayer"; 
 
canvas.width = 1224; 
 
canvas.height = 768; 
 
canvas.style.zIndex = 8; 
 
canvas.style.position = "absolute"; 
 
canvas.style.border = "1px solid"; 
 

 

 
var body = document.getElementsByTagName("body")[0]; 
 
body.appendChild(canvas); 
 

 
cursorLayer = document.getElementById("CursorLayer"); 
 

 
console.log(cursorLayer); 
 

 
// below is optional 
 

 
var ctx = canvas.getContext("2d"); 
 
ctx.fillStyle = "rgba(255, 0, 0, 0.2)"; 
 
ctx.fillRect(100, 100, 200, 200); 
 
ctx.fillStyle = "rgba(0, 255, 0, 0.2)"; 
 
ctx.fillRect(150, 150, 200, 200); 
 
ctx.fillStyle = "rgba(0, 0, 255, 0.2)"; 
 
ctx.fillRect(200, 50, 200, 200);

+8

ou simplement utiliser 'document.body.appendChild (canvas)' (vous n'avez pas à le chercher avec getElementsByTagName) - c'est une propriété de l'objet document. – Gerrat

+0

@Gerrat Bonne prise. Merci! Cependant, les deux façons sont possibles. – VisioN

+0

merci fonctionne super !! seulement je dois attendre 7 minutes avant que je puisse accepter votre awnser lol xD –

0

Cela arrive parce que vous l'appelez avant que le DOM ne soit chargé. Tout d'abord, créez l'élément et ajoutez-lui des atrributes, puis, après le chargement de DOM, appelez-le. Dans votre cas, il devrait ressembler à ça:

var canvas = document.createElement('canvas'); 
canvas.id  = "CursorLayer"; 
canvas.width = 1224; 
canvas.height = 768; 
canvas.style.zIndex = 8; 
canvas.style.position = "absolute"; 
canvas.style.border = "1px solid"; 
window.onload = function() { 
    document.getElementById("CursorLayer"); 
} 
+0

Ceci est faux, la création d'un nouvel élément ne déclenche pas window.onload ... – pasx

+0

Ce n'est pas le cas, mais vous ne pouvez pas appeler des éléments trop rapides après avoir été créés. La création d'un élément et son appel retourneront null, mais si vous attendez un peu ou ajoutez window.onload, il renverra HTMLElement. – goblin01