问题来了,document.onkeydown = checkkeycode
我将两个变量传递给 checkeycode e,它存储事件,因此存储键码和数组圆,我想用变量 c 的最新位置更新它。当我将 Circle 传递给函数时,它变得未定义,因此 {圆[4] = c._.ty}; 返回未定义的错误 我尝试放置 document.write(circle); 到文档中,它只是写了未定义,当我用 E 切换它时,它变成了键盘对象。我需要解决的是:
如何将圆数组传递给函数,以便当 raphael 平移圆时,它会更新圆中的值?
在 if (keycode == blah ) 中我是否只执行 {c.translate(value)} {circle[4] = c._.ty} ? 是否将两个不同的函数附加到单个 if 事件?
<html>
<head>
<script language="javascript" type="text/javascript" src="/home/andrew/Documents/rahpael/raphael-min.js"></script>
</head>
<body>
<script language="javascript">
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 = checkKeycode
function checkKeycode(e, circle) {
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
}
// deleted some comments I've made so far.
</script>
</body>
</html>
最佳答案
有几个问题:
1)传递参数
I'm passing two variable to checkeycode
不,你不是。浏览器将向其传递一个参数,即事件
(除非是IE,但您已经处理了它)。
如果你改变:
document.onkeydown = checkKeycode
至
document.onkeydown = function(e) {
checkKeycode(e, circle);
};
...您将传入您在全局范围内定义的圆
。
2) 姓名
您的 checkkeycode
函数接受参数 e
和 circle
,但似乎使用 e
和 c
代替。
(无论如何,您的 checkkeycode
代码已经在全局范围内关闭了 circle
,因此您可以从定义中删除 circle
参数checkkeycode
并使用 circle
而不是 c
。但如果可以的话,最好通过将参数传递到函数中来保持模块化。)
因此,如果您要模块化并只是在事件处理程序中关闭圆
:
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
}
关于javascript - 涉及document.keydown()函数的 undefined variable 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4584573/