Javascript 使用setTimeout运行的stop函数

Javascript 使用setTimeout运行的stop函数,javascript,Javascript,我想停止使用setTimeout运行的函数,并且不显示鼠标后的图像。我想用按钮点击,怎么做? 我的代码: var trailimage=[“test.gif”,10099]; var offsetfrommouse=[-25,-25]; var displayduration=0; 函数truebody(){ 返回(!window.opera&&document.compatMode&&document.compatMode!=“BackCompat”)?document.documentEl

我想停止使用setTimeout运行的函数,并且不显示鼠标后的图像。我想用按钮点击,怎么做? 我的代码:


var trailimage=[“test.gif”,10099];
var offsetfrommouse=[-25,-25];
var displayduration=0;
函数truebody(){
返回(!window.opera&&document.compatMode&&document.compatMode!=“BackCompat”)?document.documentElement:document.body;
}
函数hidetrail(){
var x=document.getElementById(“trailimageid”).style;
x、 可见性=“隐藏”;
document.onmousemove=“”;
}
功能跟随鼠标(e){
var xcoord=offsetfrommouse[0];
var ycoord=offsetfrommouse[1];
如果(类型e!=“未定义”){
xcoord+=e.pageX;
ycoord+=e.pageY;
}
else if(typeof window.event!=“未定义”){
xcoord+=truebody().scrollLeft+event.clientX;
ycoord+=truebody().scrollTop+event.clientY;
}
var x=document.getElementById(“trailimageid”).style;
x、 左=xcoord+“px”;
x、 top=ycoord+“px”;
}
警报(“obj_selected=true”);
document.onmousemove=跟随鼠标;
如果(显示持续时间>0)
setTimeout(“hidetrail()”,显示持续时间*1000);
请参阅:

保存的返回值,它是计时器的“句柄”,如果要取消,请使用该值调用

因此,在您的代码中,您需要在适当的位置声明一个
timerHandle
变量,然后在此处设置它:

if (displayduration > 0)
    timerHandle = setTimeout("hidetrail()", displayduration * 1000);
…然后创建一个按钮
单击
处理程序:

function cancelTimeoutOnClick() {
    if (timerHandle) {
        clearTimeout(timerHandle);
        timerHandle = 0;
    }
}

离题:将字符串传递到
setTimeout
几乎从来都不是最佳实践,这是一种隐式的
eval
。在您的情况下,只需传递函数引用:

if (displayduration > 0)
    timerHandle = setTimeout(hidetrail, displayduration * 1000);
                          // ^--- Difference here (no quotes, no parentheses)
您可以像>

var myTimeout = setTimeout(yourfunction);
然后你可以取消它>

clearTimeout(myTimeout);

在发布的代码中,您不会执行超时,因为displayduration为0。另外,我建议您更改
setTimeout(“hidetrail()”,displayduration*1000)
to
someVar=setTimeout(hidetrail,displayduration*1000)其中定义了someVar,您的clearTimeout可以在其中找到它。删除引号将删除被认为是邪恶的隐藏评估
var myTimeout = setTimeout(yourfunction);
clearTimeout(myTimeout);