在给定时间后停止HTML5 Javascript动画
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在给定时间后停止HTML5 Javascript动画相关的知识,希望对你有一定的参考价值。
我对canvas和javascript非常新。我找到了一个星域动画效果的片段,但它无限循环。 30秒后如何让动画停止?我相信它与clearInterval或setTimeout有关,但我不知道代码应该在哪里实现。任何帮助将不胜感激。
window.onload = function() {
var starfieldCanvasId = "starfieldCanvas",
framerate = 60,
numberOfStarsModifier = 1.0,
flightSpeed = 0.02;
var canvas = document.getElementById(starfieldCanvasId),
context = canvas.getContext("2d"),
width = canvas.width,
height = canvas.height,
numberOfStars = width * height / 1000 * numberOfStarsModifier,
dirX = width / 2,
dirY = height / 4,
stars = [],
TWO_PI = Math.PI * 2;
for(var x = 0; x < numberOfStars; x++) {
stars[x] = {
x: range(0, width),
y: range(0, height),
size: range(0, 1)
};
}
window.setInterval(tick, Math.floor(1000 / framerate));
function tick() {
var oldX,
oldY;
context.clearRect(0, 0, width, height);
for(var x = 0; x < numberOfStars; x++) {
oldX = stars[x].x;
oldY = stars[x].y;
stars[x].x += (stars[x].x - dirX) * stars[x].size * flightSpeed ;
stars[x].y += (stars[x].y - dirY) * stars[x].size * flightSpeed ;
stars[x].size += flightSpeed;
if(stars[x].x < 0 || stars[x].x > width || stars[x].y < 0 || stars[x].y > height) {
stars[x] = {
x: range(0, width),
y: range(0, height),
size: 0
};
}
context.strokeStyle = "rgba(160, 160, 230, " + Math.min(stars[x].size, 2) + ")";
context.lineWidth = stars[x].size;
context.beginPath();
context.moveTo(oldX, oldY);
context.lineTo(stars[x].x, stars[x].y);
context.stroke();
}
}
function range(start, end) {
return Math.random() * (end - start) + start;
}
};
答案
似乎tick()
是动画循环,所以改变线;
window.setInterval(tick, Math.floor(1000 / framerate));
至
window.animLoop = window.setInterval(tick, Math.floor(1000 / framerate));
window.setTimeout( function() { window.clearInterval( window.animLoop ) }, 30000 );
其中30000
是以毫秒结束的时间。
这将通过结束循环的间隔来停止重复动画。
以上是关于在给定时间后停止HTML5 Javascript动画的主要内容,如果未能解决你的问题,请参考以下文章
无法停止 requestAnimationFrame (Javascript/html5: canvas)
屏幕关闭时,HTML5 音频/javascript 停止在 android(谷歌浏览器)上工作