2012-05-18 7 views
42

Привет, у меня есть вопрос о динамическом создании холста с помощью javascript.HTML5 Динамически создавать Canvas

я создать холст, как это:

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

, но когда я пытаюсь найти его, я получаю null значение:

cursorLayer = document.getElementById("CursorLayer"); 

Могу ли я делать это не так? Есть ли лучший способ создать холст с помощью JavaScript?

+1

Возможный дубликат [Добавить холст на страницу с JavaScript] (http://stackoverflow.com/questions/9152224/add-canvas-to-a-page- с-javascript) – Vadzim

ответ

64

Проблема в том, что вы не вставляете свой элемент холста в тело документа.

Просто сделайте следующее:

document.body.appendChild(canvas); 

Пример:

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

или просто используйте 'document.body.appendChild (canvas)' (вам не нужно искать его с помощью getElementsByTagName) - это свойство объекта документа. – Gerrat

+0

@Gerrat Хороший улов. Благодаря! Однако оба пути возможны. – VisioN

+0

спасибо, что работает отлично !! только я должен подождать 7 минут, прежде чем я смогу принять твой зонт lol xD –

1

Via Jquery:

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

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

+1

jQuery, как обычно, не требуется для выполнения этой простой задачи. – boxtrain

0

Это происходит потому, что вы вызываете его перед загрузкой DOM. Во-первых, создайте элемент и добавьте к нему атрибуты, а затем после загрузки DOM вызовите его. В вашем случае это должно выглядеть так:

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

Это неправильно, создание нового элемента не вызывает window.onload ... – pasx

+0

Это не так, но вы не можете вызвать слишком быстрые элементы после создания. Создание элемента и вызов его возвратит null, но если вы подождитесь бит или добавите window.onload, он вернет HTMLElement. – goblin01