2016-04-03 14 views
0

私はW3スクールのチュートリアルに従い、キャンバス要素内でイメージをコピーする作業をしないコードを書くことになった。キャンバスは...htmlキャンバス描画イメージが動作しない

<img id="image" src="assets/images/bw.jpg" width="200" height="276" alt="" /> 
<canvas id="canvas" width="220" height="286"></canvas> 

空白であるとJavascriptは次のとおりです。

var c=document.getElementById("canvas"); 
var ctx=c.getContext("2d"); 
var img = document.getElementById("image"); 
ctx.drawImage(img,0,0); 

をこの単純な例が動作しないのはなぜ?

+1

に添付onloadイベント属性がロードされています使用することですそれをキャンバスに描くことができます。 – Kaiido

+0

いいえ私はwindow.onLoadを持っていました –

+0

それはマイナスlの** l ** oadです。受け入れられた解決策が問題を本当に解決した場合は、ブラウザにバグレポートを記入してください。 – Kaiido

答えて

0

width, height.drawImage()で呼び出してみてください。それは

実際のソリューションは、のように辛抱強く@Kaiidoによって指摘、あなたが画像を待つ必要が<img>要素

<img id="image" onload="draw()" src="http://lorempixel.com/50/50" width="200" height="276" alt="" /> 
<canvas id="canvas" width="220" height="286"></canvas> 
<script> 
    function draw() { 
    var c=document.getElementById("canvas"); 
    var ctx=c.getContext("2d"); 
    var img = document.getElementById("image"); 
    ctx.drawImage(img,0,0); 
    } 
</script> 

またはHTMLImageElement.addEventListener("load", handler)

+0

がきれいです。ありがとうございます:) –

+1

画像の幅と高さが0に設定されている場合を除いて、これは間違いなく問題です! drawImageのdestinationXおよびdestinationYオプションはデフォルトでイメージサイズになります。 @ daniel.tosabaあなたの問題は、あなたがonloadイベントを待っていないことです。イメージがキャッシュされているので、現在動作しています。 – Kaiido

+0

@Kaiido _ "あなたの問題は、あなたがonloadイベントを待っていないことです。" _どの 'onload'イベントを参照していますか? 'img'か' window'ですか? – guest271314