ЯШ: Почему эта переменная недоступна для других функций? - PullRequest
0 голосов
/ 27 декабря 2010

Я пытаюсь сделать анимацию холста:

var context;
var meter;
var pin;

function init() {
    var meter = new Image();
    var pin = new Image();
    var context = document.getElementById('canvas').getContext('2d');
    meter.src = 'background.png';
    pin.src = 'needle.png';
    context.drawImage(meter,0,0);
    context.translate(275,297);
    context.save();
    setTimeout(startup,500);
}

function startup() {
    var r=2;    // set rpm here.
    var i=r*36-27;
    var angleInRadians = 3.14159265 * i/180;  //converting degree to radian                
    context.rotate(angleInRadians); //rotating by angle
    context.drawImage(pin,-250,-3);  //adjusting pin center at meter center
    context.restore();
}

Вы можете увидеть сценарий на http://www.kingoslo.com/instruments/

С firebug я получаю сообщение о том, что контекст не определен, что мне кажется странным.

Спасибо.

С уважением, Marius

Ответы [ 3 ]

9 голосов
/ 27 декабря 2010

Вероятно, это потому, что вы используете "var" внутри функции init (), которая делает переменную new"context" локальной для этой функции вместо добавления определения к глобальной. Так что просто отбросьте «var» перед «context» в функции init (), и она должна работать. Вы должны бросить переменную перед метром и закрепить тоже.

3 голосов
/ 27 декабря 2010
var context = document.getElementById('canvas').getContext('2d');

Вы объявляете другую локальную переменную context, которая действительна только в пределах init. «Внешний» context сохраняет значение undefined. Удалите var, и он будет назначен внешнему context.

1 голос
/ 27 декабря 2010

Вы определили контекст как локальную переменную в функции init (), следовательно, глобальная переменная контекста области действия всегда равна нулю. Измените строку:

var context = document.getElementById('canvas').getContext('2d');

до

context = document.getElementById('canvas').getContext('2d');
...