我有一个函数,使用font-family
每500毫秒更改一些文本的setInterval
(我只是练习JavaScript。)通过单击“开启”按钮调用该函数,应该使用单独的按钮“关闭”来清除间隔。但是,“关闭”按钮实际上并没有清除间隔,它只是继续。我怀疑这与范围有关,但我不知道如何以其他方式编写它。另外,我不想用jQuery做这个,因为毕竟我正在做这个学习。
<body>
<p><span id="go" class="georgia">go</span> Italian</p>
<p>
<button id="on" type="button" value="turn on">turn on</button>
<button id="off" type="button" value="turn off">turn off</button>
</p>
<script>
var text = document.getElementById("go");
var on = document.getElementById("on");
var off = document.getElementById("off");
var fontChange = function() {
switch(text.className) {
case "georgia":
text.className = "arial";
break;
case "arial":
text.className = "courierNew";
break;
case "courierNew":
text.className = "georgia";
break;
}
};
on.onclick = function() {
setInterval(fontChange, 500);
};
off.onclick = function() {
clearInterval(fontChange);
};
</script>
</body>
答案 0 :(得分:46)
setInterval
返回一个ID,然后用它来清除间隔。
var intervalId;
on.onclick = function() {
if (intervalId) {
clearInterval(intervalId);
}
intervalId = setInterval(fontChange, 500);
};
off.onclick = function() {
clearInterval(intervalId);
};
答案 1 :(得分:3)
setInterval
函数返回一个整数值,它是您创建的“计时器实例”的id。
您需要将此整数值传递给clearInterval
e.g:
var timerID = setInterval(fontChange,500);
以后
clearInterval(timerID);
答案 2 :(得分:2)
您错误地使用了clearInterval。
这是正确的用途:
使用
设置计时器var_name = setInterval(fontChange, 500);
然后
clearInterval(var_name);
答案 3 :(得分:1)
setInterval方法返回您需要传递给clearInterval
的间隔ID,以便清除间隔。你传递的函数不起作用。这是一个工作setInterval / clearInterval
var interval_id = setInterval(myMethod,500);
clearInterval(interval_id);
答案 4 :(得分:1)
我认为你应该这样做:
var myInterval
on.onclick = function() {
myInterval=setInterval(fontChange, 500);
};
off.onclick = function() {
clearInterval(myInterval);
};
答案 5 :(得分:0)
你的功能有错误,但你要做的第一件事就是正确设置身体标签:
<body>
<p><span id="go" class="georgia">go</span> Italian</p>
<p>
<button id="on" type="button" value="turn on">turn on</button>
<button id="off" type="button" value="turn off">turn off</button>
</p>
</body>
<script>....</script>
问题有时可能是,当脚本启动时,您只调用“var text”而其他vars只调用一次。如果您对DOM进行更改,则此静态解决方案可能有害。
所以你可以尝试这个(这是更灵活的方法和使用函数参数,所以你可以在任何元素上调用函数):
<body>
<p><span id="go" class="georgia">go</span> Italian</p>
<p>
<button type="button" value="turn on"
onclick=turnOn("go")>turn on</button>
<button type="button" value="turn off"
onclick=turnOff()>turn off</button>
</p>
</body>
<script type="text/JavaScript">
var interval;
var turnOn = function(elementId){
interval = setInterval(function(){fontChange(elementId);}, 500);
};
var turnOff = function(){
clearInterval(interval);
};
var fontChange = function(elementId) {
var text = document.getElementById(elementId);
switch(text.className) {
case "georgia":
text.className = "arial";
break;
case "arial":
text.className = "courierNew";
break;
case "courierNew":
text.className = "georgia";
break;
}
};
</script>
你不再需要它了,所以删除它:
var text = document.getElementById("go");
var on = document.getElementById("on");
var off = document.getElementById("off");
这是动态代码,这意味着JS代码运行泛型并且不直接寻址元素。我喜欢这种方法,而不是为每个div元素定义一个自己的函数。 ;)