Entschuldigung, dass ich das zum ersten Mal poste.
Ich möchte einen Effekt erzielen, nachdem die Maus zwei Sekunden lang auf p bleibt. Er wird nicht länger als zwei Sekunden ausgeführt.
Dann habe ich festgestellt Die setTimeout-Funktion online und erfolgreich gelöst, weil ich Autodidakt bin. Daher ist mein Fundament schwach und ich muss einige Dinge erklären, die ich nicht verstehe
Code:
<script src="jquery.min.js"></script>
<script>
var timer = null; // 1.此处为什么要在这里声明timmer=null?
$(function(){
$("#test").hover(
function(){
$(this).html("悬停");
timer=setTimeout(function(){alert("hello")},2000); // 2.为什么不能直接去掉第
//一行的声明 ,在此处var timer=setTimeout(...)...
},
function(){
if(timer) // 3.这里的if语句有什么作用?我试着去掉后函数也能完整运行呀
clearTimeout(timer);
$(this).html("测试");
});
});
</script>
</head>
<body>
<p id="test">
测试
</p>
</body>
setTimeout
会返回一个整数id,是计时器编号,提前声明一个变量自然是存储编号用了;为什么不能在这里声明?要知道
var
是函数作用域的,在function
里边声明的变量一出去就没了,你叫另一个匿名函数的clearTimeout
到哪去找这个变量?这里的
if
主要是严谨,在setTimeout
成功返回计时器编号(因为初始是null,如果没返回肯定就false了)的情况下,才会执行clearTimeout(timer)
这句,避免前边执行错误时继续执行错误代码。首先,setTimeout定时器在使用后会进行clear清除,为了能知道该清楚哪个定时器,因此要加上一个变量,也就是定时器变化。
其次,函数作用域。function外部无法直接访问内部变量,因此要在function外部定义一个变量供给不同function使用。
最后if(timer)主要就是避免timer已经关闭的情况下再去触发clear报错的情况了。
多谢楼上两位!