首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >set与clearInterval

set与clearInterval
EN

Stack Overflow用户
提问于 2016-04-09 20:52:53
回答 3查看 90关注 0票数 0

我有两个函数,increaseSpeed和decreaseSpeed。它们都使用clearInterval(),然后使用setInterval,但是有些地方不对劲。

decreaseSpeed将我的速度从1000减慢到5000,但是如果我使用这个函数10-20倍,速度似乎更像是100-500毫秒。另外,如果我使用increaseSpeed将速度提高到50 at,然后使用decreaseSpeed,那么decreaseSpeed根本不会产生任何影响。

这是一套清晰的功能

代码语言:javascript
复制
var updateRate = 1000;
var id = setInterval(myFunction, updateRate);
function myFunction() {     
valClickedFun(1);
   }

和decreaseSpeed

代码语言:javascript
复制
    function decreaseSpeed(){

        clearInterval(id);
        updateRate = 5000;
        setInterval(myFunction, updateRate);

        console.log(updateRate)
};

我设置了一个JSFiddle,如果你几次点击“减速”按钮,你就会明白我的意思了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-09 21:01:35

您忘记在函数中将setInterval分配给id (decreaseSpeed和increaseSpeed)。

代码语言:javascript
复制
id = setInterval(myFunction, updateRate);  

JSFiddle

票数 1
EN

Stack Overflow用户

发布于 2016-04-09 21:03:16

我看了看你的小提琴,我想我找到了问题。

使用increaseSpeeddecreaseSpeed函数时,需要将间隔的id设置为新的间隔。这将确保下次单击“增减速度”按钮时,将清除前一个间隔。

示例:id = setInterval(myFunction, updateRate);

票数 0
EN

Stack Overflow用户

发布于 2016-04-09 21:09:21

每次对setInterval的调用都返回一个唯一的值。您在最初调用id时将其存储在setInterval中,但在创建新的间隔时,不会在decreaseSpeedincreaseSpeed中重置它。

正因为如此,每个clearInterval(id)调用都试图清除原始间隔,即使它已经被清除。随后创建的任何间隔都将继续运行。increaseSpeeddecreaseSpeed没有用更快或更慢的间隔替换现有的间隔,而是添加了一个与现有的间隔一起运行的新间隔。

改变

代码语言:javascript
复制
setInterval(myFunction, updateRate);

代码语言:javascript
复制
id = setInterval(myFunction, updateRate);

应该把它修好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36522557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档