2012-02-05 4 views
24

元々キャンバスを持たないページにキャンバスを追加するにはJavaScriptを使用しています。 は、私は次の操作を行うにしようとしています:cがnullであるため、2番目のアラートが定義されていない間、javascriptを使ってページにキャンバスを追加する

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

問題は、canvasIDにおける最初の警告(canv.id)の結果です。

誰かが私に間違っていることを教えてもらえますか?

PS:コードはGreasemonkeyの下で動作するように設計されているため、キャンバスとそのIDをHTML自体に追加することは実行可能な選択肢ではありません。

+1

あなたは'canv'をDOMに追加しないでください。さらに、 'canv'で既に参照されているので、IDでキャンバスを取得する必要はありません。 –

+0

私は、キャンバスを適切に追加した何らかの「証明」として、idによってキャンバスを取得しようとしていました。 「あなたはDOMにcanvを追加していませんでした」とはどういう意味ですか? ? – nick2k3

+4

キャンバスはちょうど宇宙に浮かんでいます。 'document.body.appendChild(canv);'のようなDOMに接続する必要があります。 –

答えて

42

使用DOMに追加するためのNode.appendChild(child)のようなもの:

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 

それとも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

ありがとうございました!要素を作成してIDを追加するよりエレガントな方法はありますか? document.createElement( 'canvas'、 "canvasID")のようなものです。 ?? – nick2k3

+0

@ nick2k3いいえ、JS属性では、を使用して設定する必要があります。 またはsetAttributes –

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

3行目のようなものがなければ、新しいキャンバスは実際にはページに挿入されません。

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 

...

+0

こんにちは、ジェフ。スタックオーバーフローへようこそ。あなたは質問を投稿したコード(または回答)の代わりにポスターを使用すべき理由を説明するために回答を編集できますか?キャンバスに画像を作成したり描画したりする際の答えには「ノイズ」がたくさんあります。実際の質問とは関係ありません。また、この質問は古く、受け入れられた答えを持っているので、あなたの答えは他の答えで説明されていない有用なものを説明するべきです。 –

+0

これは、「それをダウンロードせずにimgタグ内でイメージを抽出するための新しいキャンバスの作成方法」ですが、質問には関係しません。通常、pngイメージやbase64文字列を操作するために使用されます。通常captchasに見られる。クイックルックはここhttp://www.w3schools.com/tags/tryit.asp?filename=tryhtml5_canvas_drawimage – erm3nda

関連する問題