[英]stop function that run with setTimeout
I want stop my function that run with setTimeout and do not show image followed mouse. 我想停止使用setTimeout运行的函数,并且不显示跟随鼠标的图像。 I want do that with button click, how do that?
我想通过单击按钮做到这一点,怎么办? my code:
我的代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<script type="text/javascript">
var trailimage = ["test.gif", 100, 99];
var offsetfrommouse = [-25, -25];
var displayduration = 0;
function truebody() {
return (!window.opera && document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
}
function hidetrail() {
var x = document.getElementById("trailimageid").style;
x.visibility = "hidden";
document.onmousemove = "";
}
function followmouse(e) {
var xcoord = offsetfrommouse[0];
var ycoord = offsetfrommouse[1];
if (typeof e != "undefined") {
xcoord += e.pageX;
ycoord += e.pageY;
}
else if (typeof window.event != "undefined") {
xcoord += truebody().scrollLeft + event.clientX;
ycoord += truebody().scrollTop + event.clientY;
}
var x = document.getElementById("trailimageid").style;
x.left = xcoord + "px";
x.top = ycoord + "px";
}
alert("obj_selected = true");
document.onmousemove = followmouse;
if (displayduration > 0)
setTimeout("hidetrail()", displayduration * 1000);
</script>
</head>
<body>
<form id="form1" runat="server">
<img alt="" id="trailimageid" src="Pictures/sides/sides-not-clicked.gif" border="0" style="position: absolute; visibility: visible; left: 0px;
top: 0px; width: 50px; height: 50px"/>
</form>
</body>
</html>
var foobarTimeout = setTimeout(foobar, 1000);
...
clearTimeout(foobarTimeout);
See: 看到:
https://developer.mozilla.org/en/DOM/window.setTimeout https://developer.mozilla.org/en/DOM/window.setTimeout
https://developer.mozilla.org/en/DOM/window.clearTimeout https://developer.mozilla.org/en/DOM/window.clearTimeout
Save the return value of setTimeout
, which is a "handle" for the timer, and when you want to cancel it, call clearTimeout
with that value. 保存
setTimeout
的返回值,该值是计时器的“句柄”,并且要取消它时,请使用该值调用clearTimeout
。
So in your code, you'd declare a timerHandle
variable somewhere appropriate, then set it here: 因此,在您的代码中,您将在适当的位置声明一个
timerHandle
变量,然后在此处进行设置:
if (displayduration > 0)
timerHandle = setTimeout("hidetrail()", displayduration * 1000);
...and then create a button click
handler: ...然后创建按钮
click
处理程序:
function cancelTimeoutOnClick() {
if (timerHandle) {
clearTimeout(timerHandle);
timerHandle = 0;
}
}
Off-topic : It's almost never best practice to pass strings into setTimeout
, that's an implicit eval
. 离题 :将字符串传递到
setTimeout
几乎从来不是最佳实践,这是一个隐式的eval
。 In your case, just pass the function reference: 在您的情况下,只需传递函数引用即可:
if (displayduration > 0)
timerHandle = setTimeout(hidetrail, displayduration * 1000);
// ^--- Difference here (no quotes, no parentheses)
you use timeout like > 您使用超时>
var myTimeout = setTimeout(yourfunction);
and then you can cancel it > 然后您可以取消它>
clearTimeout(myTimeout);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.