Пара вопросов:
1) Передача аргументов
Я передаю две переменные в контрольный код
Нет, вы не 'т.Браузер передаст ему один аргумент, event
(если это не IE, но вы его обработали).
Если вы измените:
document.onkeydown = checkKeycode
to
document.onkeydown = function(e) {
checkKeycode(e, circle);
};
... вы будете передавать circle
, который вы определили в глобальной области видимости.
2) Имена
Ваша checkkeycode
функцияпринимает аргументы e
и circle
, но, кажется, вместо этого использует e
и c
.
(Ваш код checkkeycode
уже закрывается над circle
в глобальной области видимости, так что выможно просто удалить аргумент circle
из определения checkkeycode
и использовать circle
вместо c
. Но лучше всего сохранить модульность, если вы можете, передав аргумент в функцию.)
Так что, если вы используете модульность и просто закрываете circle
в обработчике событий:
var paper = Raphael(50, 50, 420, 300);
var d = paper.rect(150, 150, 30, 30);
var c = paper.circle(50, 50, 40);
var circle = [c.attrs.cy, c.attrs.cx, c.attrs.r, c._.tx, c._.ty];
var rectie = [ d.attrs.x, d.attrs.y, d.attrs.height, d.attrs.width];
document.onkeydown = function(e) {
return checkKeycode(e, circle); // Event handler is closure over `circle`
};
// v-- `c`, not `circle`
function checkKeycode(e, c) {
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
if (keycode == 40) { c.translate(0, 10)}; //{circle[4] = c._.ty};// down
if (keycode == 39) { c.translate(10, 0)}; // right
if (keycode == 38) { c.translate(0, -10)}; // up
if (keycode == 37) { c.translate(-10, 0)}; // left
}