javascript - 如何正确使用 setInterval 和 clearInterval 在两个不同的函数之间切换?

标签 javascript animation counter setinterval clearinterval

为了练习,我尝试显示一个从 0 - 9 递增,然后从 9 - 0 递减,并无限重复的数字。

我到目前为止的代码似乎很接近,但是在第二次迭代时,我的两个函数 countUpcountDownsetInterval 调用似乎相互冲突,因为显示的数字是未按预期顺序计数...然后浏览器崩溃。

这是我的代码:

<!DOCTYPE html>
<html>
    <head>
        <title>Algorithm Test</title>
    </head>

    <body onload = "onloadFunctions();">
        <script type = "text/javascript">
            function onloadFunctions()
            {
                countUp();
                setInterval(countUp, 200);
            }

            var count = 0;
            function countUp()
            {
                document.getElementById("here").innerHTML = count;
                count++;

                if(count == 10)
                {
                    clearInterval(this);
                    countDown();
                    setInterval(countDown, 200);
                }
            }
            function countDown()
            {
                document.getElementById("here").innerHTML = count;
                count--;

                if(count == 0)
                {
                    clearInterval(this);
                    countUp();
                    setInterval(countUp, 200);
                }       
            }
        </script>

        From 0 - 9, up and down:&nbsp;&nbsp;<div id = "here"></div>
    </body>
</html>

最佳答案

您需要将 setInterval( ... ) 的返回值捕获到一个变量中,因为它是对计时器的引用:

var interval;
var count = 0;

function onloadFunctions()
{
    countUp();
    interval = setInterval(countUp, 200);
}

/* ... code ... */

function countUp()
{
    document.getElementById("here").innerHTML = count;
    count++;

    if(count === 10)
    {
        clearInterval(interval);
        countUp();
        interval = setInterval(countUp, 200);
    }
}

关于javascript - 如何正确使用 setInterval 和 clearInterval 在两个不同的函数之间切换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10485385/

相关文章:

javascript - JavaScript 函数速度太快

iphone - 改变 setContentOffset 的速度 :animated:?

javascript - react native : How to do a "shared element/zoom" transition using navigator?

python - 根据 pandas 中定义类别的列过滤掉观察数量不足的 DataFrame 行

python - 子列表的计数值

javascript - AJAX 加载的内容可供 google 抓取

javascript - PHP 更改按钮文本并相应更新数据库

javascript - 在 Oracle Apex 中实现对 Shuttle 值的依赖

css - 错开 CSS3 动画时间

计算文件中的二元组(两个字符对)