JS使用setTimeOut没有作用求解答,代码如下

function positionMessage()
{
if(!document.getElementById) return false;
if(!document.getElementById("message")) return false;
var elem = document.getElementById("message");
elem.style.position = "absolute";
elem.style.top = "100px";
elem.style.left = "50px";
moveElement("message",200,100,10)
}

function moveElement(elementId,final_x,final_y,interval)
{
var element = document.getElementById(elementId);
var xpos = parseInt(element.style.left);
var ypos = parseInt(element.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--;
}
element.style.left = xpos + "px";
element.style.top = ypos + "px";
var repeat = "moveElement('" + elementId + "',"+ final_x + "," + final_y + "," + interval + ")";
movement = window.setTimeOut(repeat,interval);
}
addLoadEvent(positionMessage);
我把var repeat = "moveElement('" + elementId + "',"+ final_x + "," + final_y + "," + interval + ")";
movement = window.setTimeOut(repeat,interval);改成movement = window.setTimeOut(moveElement(elementId,final_x,final_y,interval),interval);以后可以实现执行多次,但是setTimeOut里的时间间隔没有效果,比如我把moveElement("message",200,100,5000)这个会瞬间完成,不会间隔五秒。求解答

setTimeout第一个参数是变量,不是表达式(函数也是变量)。所以要实现你要的效果有三种方法:

    使用匿名函数,在匿名函数中调用方法;

    将表达式换成字符串,那么就会执行这个表达式,缺点是无法访问当前作用域;

    使用bind方法绑定参数。

另外setTimeout是小写的o。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-12
这个函数第一个参数是函数啊,你写成字符串是几个意思追问

是写错了,但是时间间隔那个参数根本不起作用。

追答

你方法写错了,这个启动函数每次执行都要一个启动settimeout吗,这个方法是隔一段时间执行对应函数,你把这个写在你要执行的函数里面,不会隔一段时间都要启动一个新的SETTIMEOUT函数吗

追问

这个settimeout这个方法肯定可以写在方法里啊,我就是想让我这个方法隔一段时间运行,这不是相当于循环调用吗?