我有一個簡單的腳本,用箭頭鍵在屏幕上移動一個精靈。我想在一個名爲$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