我正在作为javascript重新做我的一个旧的java小程序。我想显示一个简单的动画,每隔几秒钟改变一次。我有一个测试工作,但它崩溃了一段时间后,在互联网浏览器11。
我正在使用画布,并拥有以下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放在绘图函数的末尾。那个地方对吗?从同一个函数中调用函数似乎是错误的。
很明显,我是从Mozilla.org上的画布教程中偷来的。我通常用R和python编写,我只是认为这是在javascript的wheelhouse中,所以我会尝试一下。我不打算在画布上做太多事情,只是想在资源管理器11 (我被迫在工作中使用--不要问:/)中礼貌地工作。够了解释我为什么是个懒惰的白痴。提前感谢您的帮助!
发布于 2018-06-29 13:33:22
你的直觉是正确的。在间隔回调中使用setInterval()
意味着您要创建一个新的间隔定时器,每个刻度。经过几个周期之后,就会有成千上万的重复计时器,因为每一个冗余计时器都会出于同样的原因而产生更多的冗余计时器。
如果您将其更改为setTimeout()
,它就会工作。setTimeout()
机制只执行一个延迟周期,不重复。
另外,如果实际周期是2秒,那么通过requestAnimationFrame()
启动这个过程没有多大意义,但不会有任何伤害。
https://stackoverflow.com/questions/51102940
复制相似问题