2017-12-29 72 views
0

非常に単純なコードを使用します(Image.pngの代わりに画像を使用します)。私はキャンバスに背景イメージを与えようとしています。エラー:画像が定義されていません(Image()関数を使用している場合のトラブル)

var canvas = document.getElementById("canvas"); 
ctx = canvas.getContext("2d"); 

var img = new Image(); 
img.onload=start; 
img.src="Image.png"; 
function start(){ 
ctx.drawImage(img,0,0); 
} 

しかし、私はこのエラーが表示されます。 ERROR: '画像' が定義されていません。 [無undefを]一部について:

var img = new Image().

私は

var img = document.createElement("img");

でこれを置き換えることを試みた後、エラーがなくなっていませんが、何も表示され、一切の画像、そのちょうど空。 誰かが私が間違っていることを知っていますか? ありがとうございます!

FULL CODE

var document; 
var ctx; 
var window; 

window.onload = function() { 
    start(); 
} 

function start(){ 

    var canvas = document.getElementById("canvas"); 
    ctx = canvas.getContext("2d"); 


    var img = document.createElement("img"); 
    img.src="image.png"; 
    img.onload=start; 

    function start(){ 
    ctx.drawImage(img,0,0,400,400); 
    } 
} 
+2

'Image'が定義されていない場合、何かうまくいくでしょう。これはブラウザにあるのでしょうか?それはノードで実行されていないのですか? https://jsfiddle.net/cud2zL11/1/ –

+0

私はブラケットを使用していますが、私のブラウザ(chrome)では動作しません。 – NTMN

+0

私たちはもっと多くの情報を必要としていると思います。コードは、私が投稿したjsfiddleリンクに見られるように動作します。 –

答えて

0

あなたがDOMに作成した画像を添付する必要があります。

document.getElementById("image-container").appendChild(img); 

編集:私はあなたがキャンバスオブジェクトに描画しているのを見ています。その場合は、画像が正しく読み込まれていないと思われます。

2つのアイデア:start()関数内にデバッグ出力を追加したり、ブレークポイントを設定したり、その時点で 'img'に含まれている内容を調べることができます。または、devtoolsコンソールの[ネットワーク]タブでステータスコードを確認することもできます。または、画像をwww.google.com/images/logo.pngのように動作することがわかっているものと置き換えることもできます。これはすべてあなたが問題を絞首刑にするべきです。

注:あなたがそれを宣言するべきではありませんので、windowはグローバル変数であり、windowなどwindow.documentとしての性質である名前もグローバルです - それを宣言せずdocumentとして参照することができます。場合によっては、JSフレームワークは不平を言いますが、これを解決するフレームワーク固有の方法があります。これらの変数の重複した宣言は、下に行く良い方法ではありません。

ESlintのエラーに応じてこれらを追加する場合は、プロジェクトルートにeslintrc.jsonを追加してください(まだ持っていない場合)。それに次のプロパティを指定すると、ブラウザのグローバルには不満はありません:

{ 
    "env": { 
    "browser": true 
    }                  
} 

Imageが定義されていない理由は、現代のブラウザ環境では起こりません。それはあなたの環境設定で何かでなければなりません。このコードをどのように実行しているかについて、あなたが提供できる情報はありますか?

+0

私はブラケットを使ってコードをテストし、ブラウザはクロムでテストします。ウィンドウを宣言していないときは、ブラケットはESLintエラーを返します。ウィンドウは定義されていません。 – NTMN

+0

Gotcha。私はそれがESlintである可能性があると思った:) この場合、ブラウザグローバルを設定するようにESLintを設定したいと思うだろう。あなたのプロジェクトのルートに 'eslintrc.json'を追加し、それを以下のテキスト与える場合: { 「ENV」:{ 「ブラウザ」:真を、 } } それらの糸くずのエラーを修正する必要があること。 (私はこのコードを追加するために私の答えを編集することに注意してください、私はこれが縮んだとして表示されると思います)。 – MST

+0

あなたは何を知っていますか?これはESlintに 'Image'について教えて、あなたの他のエラーを修正するべきです! (私はブラケットのことを聞いたことがないし、彼らのデフォルト設定がこれを気にしないことに驚いている)。 – MST

0

画像のsrcを設定する前に、onloadコールバックを設定してみてください。画像がキャッシュされている場合

var img = document.createElement("img"); 
img.onload=start; 
img.src="image.png"; 

、そしてonloadはすぐにそれがstartsee this questionに割り当てられている、すなわち前に、設定されているsrcとして解雇されるだろう。

関連する問題