2012-05-18 30 views
42

Hola, tengo una pregunta sobre la creación dinámica de un lienzo mediante javascript.HTML5 Crear dinámicamente lienzo

puedo crear un lienzo de esta manera:

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

pero cuando trato de localizarlo, me sale un valor null:

cursorLayer = document.getElementById("CursorLayer"); 

estoy haciendo mal? ¿Hay una mejor manera de crear un lienzo usando JavaScript?

+1

duplicado posible de [Añadir lienzo a una página con javascript] (http://stackoverflow.com/questions/9152224/add-canvas-to-a-page- with-javascript) – Vadzim

Respuesta

64

El problema es que no inserta su elemento canvas en el cuerpo del documento.

Sólo haga lo siguiente:

document.body.appendChild(canvas); 

Ejemplo:

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

o simplemente use 'document.body.appendChild (canvas)' (no tiene que buscarlo con getElementsByTagName) - es una propiedad del objeto del documento. – Gerrat

+0

@Gerrat Buena captura. ¡Gracias! Sin embargo, ambas formas son posibles. – VisioN

+0

gracias funciona genial !! sólo tengo que esperar 7 minutos antes de que pueda aceptar su awnser jaja xD –

1

Via Jquery:

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

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

+1

jQuery es, como de costumbre, innecesario para hacer esta simple tarea. – boxtrain

0

Sucede porque lo llamas antes de que DOM se haya cargado. En primer lugar, crea el elemento y agrégalo a él, luego, después de que DOM haya cargado, llámalo. En su caso, debe ser similar a lo siguiente:

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

Esto está mal, crear un nuevo elemento no desencadena window.onload ... – pasx

+0

No funciona, pero no puede llamar a elementos demasiado rápidos después de creados. Crear un elemento y llamarlo devolverá nulo, pero si espera un poco o agrega window.onload, devolverá HTMLElement. – goblin01