2012-02-05 28 views
24

Tôi đang cố gắng sử dụng Javascript để thêm canvas vào một trang mà ban đầu không có. Tôi cố gắng để làm như sau:Thêm canvas vào một trang có javascript

var canv=document.createElement("canvas"); 
canv.setAttribute("id", "canvasID"); 
alert(canv.id); 
var c=document.getElementById("canvasID"); 
alert(c.id); 

Vấn đề là cảnh báo đầu tiên (canv.id) kết quả trong canvasID, trong khi cảnh báo thứ hai là undefined vì c là null.

Ai có thể cho tôi biết tôi đang làm gì sai?

PS: mã được thiết kế để chạy dưới Greasemonkey để thêm canvas và ID của nó trong chính HTML không phải là tùy chọn khả thi.

+1

Bạn đã không không thêm 'canv' vào DOM. Ngoài ra, bạn không cần phải lấy canvas bằng ID của nó vì nó đã được tham chiếu trong 'canv'. –

+0

Tôi đã cố gắng để có được vải bằng id như một số loại "bằng chứng" rằng vải đã được thêm vào đúng. Ý của bạn là gì bởi "Bạn không thêm canv vào DOM." ? – nick2k3

+4

canvas chỉ đang trôi nổi trong không gian. Nó cần được gắn vào DOM, một cái gì đó như 'document.body.appendChild (canv);', sẽ thực hiện thủ thuật. –

Trả lời

42

Sử dụng một cái gì đó giống như Node.appendChild(child) để thêm nó vào DOM:

var canv = document.createElement('canvas'); 
canv.id = 'someId'; 

document.body.appendChild(canv); // adds the canvas to the body element 
document.getElementById('someBox').appendChild(canv); // adds the canvas to #someBox 

Hoặc bạn có thể sử dụng element.innerHTML:

document.body.innerHTML += '<canvas id="someId"></canvas>'; // the += means we add this to the inner HTML of body 
document.getElementById('someBox').innerHTML = '<canvas id="someId"></canvas>'; // replaces the inner HTML of #someBox to a canvas 
+0

Cảm ơn bạn đã làm điều đó! Có cách nào tao nhã hơn để tạo phần tử và thêm ID không? một cái gì đó như document.createElement ('canvas', "canvasID"); ?? – nick2k3

+0

@ nick2k3 no, thuộc tính JS cần thiết lập bằng cách sử dụng. hoặc setAttributes. –

3
var canv=document.createElement("canvas"); 
canv.setAttribute("id", "canvasID"); 
document.body.appendChild(canv); 

Nếu không có thứ gì đó giống như dòng thứ ba đó, canvas mới của bạn chưa bao giờ được chèn vào trang.

4
var canvas = document.getElementById('canvas'); //finds Original Canvas 
    img = document.createElement('img'); 
    img.src = 'images/a.jpg'; //stores image src 

    var canv = document.createElement('canvas'); // creates new canvas element 
    canv.id = 'canvasdummy'; // gives canvas id 
    canv.height = canvas.height; //get original canvas height 
    canv.width = canvas.width; // get original canvas width 
    document.body.appendChild(canv); // adds the canvas to the body element 

    var canvas1 = document.getElementById('canvasdummy'); //find new canvas we created 
    var context = canvas1.getContext('2d'); 

    context.drawImage(img, 0, 0, canvas.width, canvas.height); //draws background image 
    context.drawImage(canvas, 0, 0); //draws original canvas on top of background 
    cscreen = canvas1.toDataURL(); //generates PNG of newly created canvas 
    document.body.removeChild(canv); // removes new canvas 

tôi sử dụng tất cả thời gian và hoạt động tuyệt vời ...

+0

Xin chào, Jeff. Chào mừng bạn đến với Stack Overflow. Bạn có thể chỉnh sửa câu trả lời của mình để giải thích lý do tại sao người đăng nên sử dụng mã của bạn thay vì mã được đăng trong câu hỏi (hoặc bất kỳ câu trả lời nào) không? Có rất nhiều "tiếng ồn" trong câu trả lời của bạn đối phó với việc tạo và vẽ hình ảnh lên khung vẽ, điều đó chẳng liên quan gì đến câu hỏi thực tế được hỏi. Ngoài ra, kể từ khi câu hỏi này là cũ và có một câu trả lời được chấp nhận, câu trả lời của bạn nên giải thích một cái gì đó hữu ích mà không được giải thích trong các câu trả lời khác. –

+0

Đây là câu trả lời cá nhân của Jeff về "cách tạo canvas mới để trích xuất hình ảnh bên trong thẻ img mà không tải xuống lại" mà không liên quan đến câu hỏi. Thường được sử dụng để có được hình ảnh png hoặc chuỗi base64 để thao tác chúng. Thường thấy trên captchas. Xem nhanh tại đây http://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_canvas_drawimage – erm3nda

Các vấn đề liên quan