2012-02-05 13 views
24

Sto cercando di usare Javascript per aggiungere una tela a una pagina che in origine non ne ha una. Sto cercando di fare quanto segue:Aggiungi canvas a una pagina con javascript

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

il problema è il primo avviso (canv.id) si traduce in canvasID, mentre il secondo avviso è indefinito, perché c è nullo.

Qualcuno può dirmi cosa sto sbagliando?

PS: il codice è progettato per essere eseguito in Greasemonkey, quindi aggiungere l'area di disegno e il relativo ID nello stesso HTML non è un'opzione valida.

+1

Non hai aggiungere 'canv' al DOM. Inoltre, non è necessario ottenere la tela dal proprio ID poiché è già referenziata in 'canv'. –

+0

Stavo cercando di ottenere la tela con id come una sorta di "prova" che la tela fosse stata aggiunta correttamente. Cosa intendi con "Non hai aggiunto Canv al DOM". ? – nick2k3

+4

la tela è semplicemente fluttuante nello spazio. Deve essere collegato al DOM, qualcosa come 'document.body.appendChild (canv);', farà il trucco. –

risposta

42

usare qualcosa come Node.appendChild(child) per aggiungere al 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 

Oppure si può utilizzare 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

Grazie a te! C'è un modo più elegante per creare un elemento e aggiungere un ID? qualcosa come document.createElement ('canvas', "canvasID"); ?? – nick2k3

+0

@ nick2k3 no, negli attributi JS è necessario impostare utilizzando. o setAttributes. –

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

Senza qualcosa di simile terza linea, la nuova tela è mai effettivamente inserito nella pagina.

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 

Io lo uso per tutto il tempo e grandi opere ...

+0

Ciao, Jeff. Benvenuto in Stack Overflow. Potresti modificare la tua risposta per spiegare perché il poster dovrebbe utilizzare il tuo codice anziché il codice inserito nella domanda (o una qualsiasi delle risposte)? C'è un sacco di "rumore" nella tua risposta che riguarda la creazione e il disegno di immagini sulla tela, che non ha nulla a che fare con la domanda reale. Inoltre, poiché questa domanda è vecchia e ha una risposta accettata, la tua risposta dovrebbe spiegare qualcosa di utile che non è spiegato nelle altre risposte. –

+0

Questa è la risposta personale di Jeff a "come creare una nuova tela per estrarre l'immagine all'interno di un tag img senza scaricarla di nuovo" ma non correlata alla domanda. Solitamente usato per ottenere immagini png o stringhe base64 per manipolarli. Solitamente visto sui captcha. Un rapido sguardo qui http://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_canvas_drawimage – erm3nda

Problemi correlati