だから、Firefoxがなぜ$( "#canvas")[0] .getContext( '2d');と言っているのか分かりません。定義されていません。私はすべての関数がそれにアクセスできるように関数から抜き出していますが、ここではctxは未定義です。私は無名の関数にCTXの位置を転送するときjQuery-私に説明してください。閉鎖、可変コンテキスト
(function($) {
// Undefined
var ctx = $('#canvas')[0].getContext("2d");
var x = 150;
var y = 150;
var dx = 2;
var dy = 4;
$(function() {
setInterval(draw, 10);
})
function draw() {
ctx.clearRect(0,0,300,300);
ctx.beginPath();
ctx.arc(x,y,10,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();
x+=dx;
y+=dy;
}
})(jQuery);
はしかし、CTXは未定義されていません。
(function($) {
var ctx;
var x = 150;
var y = 150;
var dx = 2;
var dy = 4;
$(function() {
//Not Undefined
ctx = $("#canvas")[0].getContext('2d');
setInterval(draw, 10);
})
function draw() {
ctx.clearRect(0,0,300,300);
ctx.beginPath();
ctx.arc(x,y,10,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();
x+=dx;
y+=dy;
}
})(jQuery);
いただきました、最初のコードで間違って?私はvar ctxが上に宣言されていることを意味します。それはそれをグローバル変数にします。うーん、私が得たエラーは$( "#canvas")[0]は未定義です。 #canvasにアクセスできないことを意味します。なぜですか?
(http://jsbin.com/afuju/edit経由で編集可能)http://jsbin.com/afujuを。最初にキャンバスオブジェクトを取得しようとすると、実際にはまだロードされていないため、最初のキャンバスオブジェクトは機能しません。 –
コールバック内でコードをラップするのは間違いありませんが、コンテキストの問題については間違っています*。問題はおそらく、キャンバスタグが宣言される前にjavascriptコードが実行されていることでしょう。私は私の答えでこれを実証しました。 – brianpeiris
ありがとうございます。私はこのことがうまくいくかどうかを実験していました。私は今それを理解する。 – rymn