我有一个简单的脚本,用箭头键在屏幕上移动一个精灵。我想在一个名为$s
的变量中包含对我的$('#sprite')
的引用。但根据我声明和初始化$s
,我得到一个工作功能或非工作功能。为什么是这样?不能改变jQuery对象变量。这是范围问题吗?
编辑:区别在于我声明和初始化$s
。我不小心将相同的代码片段放入了两次,但现在已经修复。
这不起作用:
$(document).ready(main());
function main(){
\t
\t var $s = $("#sprite");
\t var time = 'fast';
\t
\t $(document).keydown(function(e){
// \t \t \t var $s = $("#sprite");
\t \t \t console.log($s);
\t \t \t key = e.which
\t \t \t switch(key){
\t \t \t \t case 37: //left
\t \t \t \t \t $s.animate({left: "-=10px"}, time);
\t \t \t \t \t console.log("left");
\t \t \t \t \t break;
\t \t \t \t case 38: //up
\t \t \t \t \t $s.animate({top: "-=10px"}, time)
\t \t \t \t \t console.log("up");
\t \t \t \t \t break;
\t \t \t \t case 39: //right
\t \t \t \t \t $s.animate({left: "+=10px"}, time)
\t \t \t \t \t console.log("right");
\t \t \t \t \t break;
\t \t \t \t case 40: //down
\t \t \t \t \t $s.animate({top: "+=10px"}, time)
\t \t \t \t \t console.log("down");
\t \t \t \t \t break;
\t \t \t \t default:
\t \t \t \t \t break;
\t \t \t }
\t \t \t
\t });
};
这工作:
$(document).ready(main());
function main(){
\t
// \t var $s = $("#sprite");
\t var time = 'fast';
\t
\t $(document).keydown(function(e){
\t \t \t var $s = $("#sprite");
\t \t \t console.log($s);
\t \t \t key = e.which
\t \t \t switch(key){
\t \t \t \t case 37: //left
\t \t \t \t \t $s.animate({left: "-=10px"}, time);
\t \t \t \t \t console.log("left");
\t \t \t \t \t break;
\t \t \t \t case 38: //up
\t \t \t \t \t $s.animate({top: "-=10px"}, time)
\t \t \t \t \t console.log("up");
\t \t \t \t \t break;
\t \t \t \t case 39: //right
\t \t \t \t \t $s.animate({left: "+=10px"}, time)
\t \t \t \t \t console.log("right");
\t \t \t \t \t break;
\t \t \t \t case 40: //down
\t \t \t \t \t $s.animate({top: "+=10px"}, time)
\t \t \t \t \t console.log("down");
\t \t \t \t \t break;
\t \t \t \t default:
\t \t \t \t \t break;
\t \t \t }
\t \t \t
\t });
};
什么是两者之间的区别? – Scimonster
您正在调用'main'。将引用传递给'.ready()',例如'.ready(main)' – guest271314