그래, Firefox가 $ ("# canvas") [0] .getContext ('2d'); 정의되지 않았습니다. 나는 모든 함수가 그것에 접근 할 수 있도록 함수에서 제외했다. 그러나 여기서 ctx는 여전히 정의되지 않았다. I는 이름 기능 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에 액세스 할 수 없다는 의미입니다. 왜 그렇습니까?
올바른 것입니다. 첫 번째 것은 작동하지 않습니다. 왜냐하면 캔버스 객체를 얻으려고 할 때 아직 실제로로드되지 않았기 때문입니다. –
콜백 내부에 코드를 래핑하는 것이 맞지만 컨텍스트 문제에 대해서는 * 잘못되었습니다. 문제는 아마 canvas 태그가 선언되기 전에 javascript 코드가 실행 중일 것입니다. 나는 이것을 나의 답에서 보여 주었다. – brianpeiris
감사합니다. 나는이 방법이 작동하는 방식으로 실험하고 있었다. 나는 그것을 지금 이해한다. – rymn