2012-05-18 24 views
42

Hallo, ich habe eine Frage zum dynamischen Erstellen einer Leinwand mit Javascript.HTML5 Dynamisch Canvas erstellen

mache ich eigentlich eine Leinwand wie folgt aus:

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"; 

aber wenn ich versuche, es zu finden, erhalte ich eine null Wert:

cursorLayer = document.getElementById("CursorLayer"); 

Bin ich es falsch? Gibt es eine bessere Möglichkeit, eine Leinwand mit JavaScript zu erstellen?

+1

Mögliches Duplikat [Leinwand hinzufügen zu einer Seite mit Javascript] (http://stackoverflow.com/questions/9152224/add-canvas-to-a-page- with-javascript) – Vadzim

Antwort

64

Das Problem besteht darin, dass Sie Ihr Canvas-Element nicht in den Dokumentkörper einfügen.

tun Sie einfach das folgende:

document.body.appendChild(canvas); 

Beispiel:

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

oder einfach 'document.body.appendChild (canvas)' (Sie müssen nicht mit getElementsByTagName suchen) - es ist eine Eigenschaft des Dokumentobjekts. – Gerrat

+0

@Gerrat Guter Fang. Vielen Dank! Beide Wege sind jedoch möglich. – VisioN

+0

danke funktioniert super !! nur ich muss 7 min warten, bevor ich deine awnser akzeptieren kann lol xD –

1

Via JQuery:

$('<canvas/>', { id: 'mycanvas', height: 500, width: 200}); 

http://jsfiddle.net/8DEsJ/736/

+1

jQuery ist wie immer unnötig, um diese einfache Aufgabe zu erledigen. – boxtrain

0

Es passiert, weil Sie es aufrufen, bevor DOM geladen hat. Erstellen Sie zuerst das Element und fügen Sie attributes dazu hinzu, und rufen Sie es nach Aufruf von DOM auf. In Ihrem Fall sollte es so aussehen:

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

Dies ist falsch, das Erstellen eines neuen Elements löst nicht window.onload ... – pasx

+0

Es nicht, aber Sie können nicht zu schnell Elemente nach dem Erstellen aufrufen. Wenn Sie ein Element erstellen und aufrufen, wird null zurückgegeben. Wenn Sie jedoch ein wenig warten oder window.onload hinzufügen, wird HTMLElement zurückgegeben. – goblin01