gpt4 book ai didi

javascript setinterval 崩溃资源管理器 11 选项卡

转载 作者:行者123 更新时间:2023-11-30 14:31:29 25 4
gpt4 key购买 nike

我正在将我的一个旧 java applet 重新做成 javascript。我想显示一个每隔几秒更改一次的简单动画。我有一个测试工作正常,但它在 Internet Explorer 11 中一段时间​​后使选项卡崩溃。

我正在使用 Canvas 并且有这个 html:

<script src="jsfnn2.js"></script>
<body onload="init();">
<canvas id="tutorial" width="300" height="300"></canvas>

和 javascript 的(可能)相关部分是:

function init() {
window.requestAnimationFrame(draw);
}

...

function draw() {
var canvas = document.getElementById('tutorial');

...

if (canvas.getContext) {
var ctx = canvas.getContext('2d');

...

}
setInterval( draw, 2000);
}
init();

所以我把 setInterval 放在最后的 draw 函数中。那是正确的地方吗?从同一个函数中调用一个函数似乎是错误的。

很明显,我刚刚从 Mozilla.org 上的 Canvas 教程中窃取了其中的大部分内容。我通常用 R 和 python 编写,我只是认为这是在 javascript 的驾驶室中,所以我会尝试一下。我不打算用 canvas 做很多事情,只是想让它在 explorer 11 中礼貌地工作(我在工作中被迫使用它 - 不要问 :/)。好的,足以解释为什么我是一个懒惰的白痴。预先感谢您的帮助!

最佳答案

您的直觉是正确的。使用 setInterval() inside 间隔回调意味着您在每次滴答时创建一个间隔计时器。几个周期后会有数千个,因为出于同样的原因,这些冗余计时器中的每一个也会创建更多冗余计时器。

如果您将其更改为 setTimeout(),它将起作用。 setTimeout() 机制只是延迟一个周期,不会重复。

此外,如果实际周期为 2 秒,则通过 requestAnimationFrame() 启动流程没有多大意义,但不会造成任何伤害。

关于javascript setinterval 崩溃资源管理器 11 选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51102940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com