这个例子来自书" dom scripting" - 杰里米基思。
function moveElement(elementID,final_x,final_y,interval) {
if (!document.getElementById) return false;
if (!document.getElementById(elementID)) return false;
var elem = document.getElementById(elementID);
var xpos = parseInt(elem.style.left);
var ypos = parseInt(elem.style.top);
if (xpos == final_x && ypos == final_y) {
return true;
}
if (xpos < final_x) {
xpos++;
}
if (xpos > final_x) {
xpos--;
}
if (ypos < final_y) {
ypos++;
}
if (ypos > final_y) {
ypos--;
}
elem.style.left = xpos + "px";
elem.style.top = ypos + "px";
var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
movement = setTimeout(repeat,interval);
}
我不明白为什么这一行有这么多串联
var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
答案 0 :(得分:1)
这是因为var repeat
实际上是函数调用的字符串表示,而不是函数本身。
要在代码中执行相同的操作(不使用字符串),您可以执行以下操作:
var repeat = function() { moveElement(elementId, final_x, final_y, interval); }
movement = setTimeout(repeat, interval);
答案 1 :(得分:1)
这是调用函数的奇怪方法。你永远不应该使用string作为setTimeout和setInterval的第一个参数,我不建议用这种例子来读书。
正确的方法是通过所需的函数调用传递一个无穷大的函数。
答案 2 :(得分:0)
因为repeat
包含moveElement
函数的调用。我们知道传递给函数的参数必须用,
分隔。所以在这里我们将变量的值与coma连接起来以获得将调用函数moveElement