JavaScript "Maximum Call Size Stack Exceeded"

标签 javascript

我正在编写一个锁屏,它的“灵感”来自 Windows 8。当用户单击图像时,它会向上滑动以显示密码输入字段等。我希望锁屏能够“过渡”或“动画”只是更改显示属性。

我已经为单击设置了一个事件处理程序,该处理程序调用名为 SlideLockscreenUp 的函数。当我运行这个时,我遇到了“超出最大调用大小堆栈”错误。最初我的代码是:

function slideLockscreenUp(){

    t = setTimeout(function(){
        ls.style.top = '-1%';
    }, 100);

    slideLockscreenUp();
}

当我第一次收到错误时,我认为这是因为我没有设置任何停止递归的条件,因此它将永远继续迫使浏览器干扰。

这就是我接下来想到的:

            function slideLockscreenUp(){

            do{
                t = setTimeout(function(){
                    ls.style.top = '-1%';
                }, 10);

                slideLockscreenUp();
            } while(ls.style.top < "-100%" );

        }

如您所见,我测试了显示属性,以在position:top 为-100% 时停止该功能。但是我仍然收到错误,现在我对为什么有点困惑。任何帮助都会很棒!

最佳答案

您需要在 setTimeout 回调函数内部递归调用 slideLockscreenUp,否则它将在第一个 setTimeout 回调之前被多次调用甚至被称为。

我建议您使用setIntervalclearInterval,而不是多次调用setTimeout

function slideLockscreenUp(){

    t = setInterval(function(){
        ls.style.top = '-1%';

        if (/* exit condition */) {
            clearInterval(t);
        }
    }, 100);

}

关于JavaScript "Maximum Call Size Stack Exceeded",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24622186/

相关文章:

javascript - Marionette onAttach 生命周期在测试期间未触发

javascript - Chrome 版本 61 为 document.documentElement.scrollHeight 返回不同的结果

javascript - 有没有办法在 Highcharts 中突出显示某个特定系列?

javascript - 将 coinmarketcap api v2 与 Google Sheets 结合使用 - 通过多次调用添加到 js 对象

javascript - 列表之间的 JQuery 移动更改元素

javascript - WebRTC - DataChannel - 适用于移动互联网?

javascript - 在 Javascript 中重新加载图像源时出现问题

javascript - HTML5/JS Canvas 显示图片

javascript - 停止动画并在悬停时将所有圆圈对齐在同一条线上

javascript - 为什么这个函数可以工作但仍然返回 typeError ... is not a function?