2012-05-18 22 views
42

हाय बनाने मैं एक सवाल के बारे में JavaScript का उपयोग करके एक कैनवास बनाने की है।एचटीएमएल 5 गतिशील रूप से कैनवास

मैं इस तरह एक कैनवास बनाने के लिए:

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

मैं इसे गलत कर रहा हूं? जावास्क्रिप्ट का उपयोग कर कैनवास बनाने का कोई बेहतर तरीका है?

+1

(http://stackoverflow.com/questions/9152224/add-canvas-to-a-page- [जावास्क्रिप्ट साथ एक पृष्ठ पर कैनवास जोड़ें] की संभावित डुप्लिकेट साथ-जावास्क्रिप्ट) – 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 (कैनवास)' (आप getElementsByTagName के साथ इसे खोजने की जरूरत नहीं है) - यह दस्तावेज़ वस्तु की एक संपत्ति है। – Gerrat

+0

@Gerrat अच्छी पकड़। धन्यवाद! हालांकि, दोनों तरीकों से संभव है। – VisioN

+0

धन्यवाद महान काम करता है !! केवल मुझे 7 मिनट का इंतजार करना पड़ेगा इससे पहले कि मैं आपके आयनसर लॉल xD –

1

वाया Jquery:

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

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

+1

jQuery सामान्य काम करने के लिए सामान्य रूप से अनावश्यक है। – boxtrain

0

यह इसलिए होता है क्योंकि आप इसे पहले डोम भरी हुई है। सबसे पहले, तत्व बनाएं और इसमें एट्रिब्यूट जोड़ें, फिर डोम ने इसे लोड करने के बाद इसे कॉल किया है। आपके मामले में ऐसा लगता है कि तरह दिखना चाहिए:

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

यह गलत है, एक नया तत्व बनाना विंडो को ट्रिगर नहीं करता है। लोड करें ... – pasx

+0

यह नहीं है, लेकिन आप बनाए जाने के बाद बहुत तेज तत्वों को कॉल नहीं कर सकते हैं। तत्व बनाना और इसे कॉल करना शून्य वापस आ जाएगा, लेकिन यदि आप थोड़ा इंतजार करते हैं या विंडो जोड़ते हैं। इसे लोड करें HTTLElement को वापस कर देगा। – goblin01

संबंधित मुद्दे