我希望在延迟一段时间后执行特定数量的语句。 例如:
function findPosX(obj) {
var curleft = 0;
if (obj.offsetParent) {
while (1) {
curleft += obj.offsetLeft;
if (!obj.offsetParent) {
break;
}
obj = obj.offsetParent;
}
} else if (obj.x) {
curleft += obj.x;
}
return curleft;
}
function findPosY(obj) {
var curtop = 0;
if (obj.offsetParent) {
while (1) {
curtop += obj.offsetTop;
if (!obj.offsetParent) {
break;
}
obj = obj.offsetParent;
}
} else if (obj.y) {
curtop += obj.y;
}
return curtop;
}
function gotoDiv(index) {
var ele = document.getElementById("Div" + index);
var x = findPosX(ele);
var y = findPosY(ele);
setTimeout("window.scrollTo(x, y)", 5000);
}
这里我想将当前滚动位置设置为特定div。但它给了我错误: x未定义。让我告诉你,如果我使用下面的函数它工作正常,所以请不要告诉我ele是空的,等等等等。
function gotoDiv(index) {
var ele = document.getElementById("Div" + index);
var x = findPosX(ele);
var y = findPosY(ele);
window.scrollTo(x, y);
}
任何帮助表示感谢。
答案 0 :(得分:14)
您可以为setTimeout
提供一个函数,而不是一个字符串,它可以让您访问这些变量:
setTimeout(function() { window.scrollTo(x, y); }, 5000);
答案 1 :(得分:4)
尝试
setTimeout("window.scrollTo(" + x + ", " + y + ")", 5000);
这不是最佳做法。 请改用它:
setTimeout(function() { window.scrollTo(x, y); }, 5000);
答案 2 :(得分:1)
将函数包装在一个闭包中,然后将超时放在闭包中。