2012-05-18 13 views
42

Witam, mam pytanie dotyczące dynamicznego tworzenia obszaru roboczego przy użyciu javascript.HTML5 Dynamicznie twórz Canvas

tworzę płótno tak:

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

ale gdy próbuję go zlokalizować, dostaję null wartość:

cursorLayer = document.getElementById("CursorLayer"); 

to robię źle? Czy istnieje lepszy sposób na utworzenie płótna za pomocą JavaScript?

+1

Możliwa duplikat [Dodaj płótno do strony z JavaScript] (http://stackoverflow.com/questions/9152224/add-canvas-to-a-page- with-javascript) – Vadzim

Odpowiedz

64

Problem polega na tym, że element canvas nie jest wstawiany do dokumentu.

Wystarczy wykonać następujące czynności:

document.body.appendChild(canvas); 

Przykład:

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

lub po prostu użyj 'document.body.appendChild (canvas)' (nie musisz szukać go za pomocą getElementsByTagName) - jest to właściwość obiektu dokumentu. – Gerrat

+0

@Gerrat Dobry połów. Dzięki! Oba sposoby są jednak możliwe. – VisioN

+0

dzięki działa świetnie! tylko muszę poczekać 7 min zanim mogę zaakceptować twój awatar lol xD –

0

Dzieje się tak, ponieważ wywołuje się go przed załadowaniem DOM. Najpierw utwórz element i dodaj atrributes do niego, a następnie po załadowaniu DOM wywołaj go. W Twoim przypadku powinno to wyglądać tak:

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

To jest złe, tworzenie nowego elementu nie uruchamia window.onload ... – pasx

+0

Nie ma, ale nie można wywoływać zbyt szybko elementów po utworzeniu. Tworzenie elementu i wywoływanie go zwróci wartość null, ale jeśli poczekasz trochę lub dodasz window.onload, zwróci ona wartość HTMLElement. – goblin01