Fungsi ini digunakan untuk mencipta kesan animasi:
function moveElement(elementId,final_x,final_y,interval){
// 名称 id x轴位置 y轴位置 速度
var elem=document.getElementById(elementId);
var x_pos=parseInt(elem.style.left);
var y_pos=parseInt(elem.style.top);
if(elem.movement){
clearTimeout(elem.movement);
} //若elem已存在一个movement属性,先结束它
if(y_pos==final_y&&x_pos==final_x){
return true;
}
if(y_pos<final_y){
dist=Math.ceil((final_y-y_pos)/30);//每运动一次的数值
y_pos=y_pos+dist;
}
if(y_pos>final_y){
dist=Math.ceil((y_pos-final_y)/30);
y_pos=y_pos-dist;
}
if(x_pos<final_x){
dist=Math.ceil((final_x-x_pos)/30);
x_pos=x_pos+dist;
}
if(x_pos>final_x){
dist=Math.ceil((x_pos-final_x)/30);
x_pos=x_pos-dist;
}
elem.style.top=y_pos+"px";
elem.style.left=x_pos+"px";
repeat="moveElement('"+elementId+"',"+final_x+","+final_y+","+interval+")"
elem.movement=setTimeout(repeat,interval)
// 自定义的属性movement,它属于elem
}
Mengenai ayat terakhir elem.movement=setTimeout(repeat,interval)
dan ayat di atas if(elem.movement){
clearTimeout(elem.movement);
}
Saya tahu bahawa fungsi mereka adalah untuk menamatkan fungsi yang dijalankan kali terakhir apabila ia dijalankan semula, tetapi mengapa ia melaporkan ralat apabila terus menulis movement=setTimeout(repeat,interval), manakala menulis elem.movement sudah memadai?
pergerakan dan elem mempunyai korespondensi satu sama satu.
Jika anda menulisnya seperti cara anda menulisnya, pergerakan menjadi pembolehubah global.