これがあなたの答えです。この雪の雨は、純粋な HTML5 Canvas を使用して作成されています。このアニメーションを実現するために使用される手法は、「ダブル バッファ アニメーション」と呼ばれます。まず、ダブル バッファ アニメーション テクニックとは何かを知っておくとよいでしょう。
ダブル バッファ テクニック: これは、アニメーションをクリアにし、ちらつきを少なくするための高度なテクニックです。この手法では 2 つの Canvas が使用されます。1 つ目は結果を表示するために Web ページに表示され、2 つ目はバックプロセスでアニメーション画面を作成するために使用されます。
これがどのように役立つか、非常に多くの移動を伴うアニメーションを作成する必要があるとします。たとえば、降雪の例のように、多くのフレークが独自の速度で移動しているため、それらを動かし続け、位置を変更する必要があります。各フレークをキャンバス上で更新します。これは処理するのが非常に重いプロセスです。
したがって、ページ キャンバスで各フレークを直接更新する代わりに、バッファ キャンバスを作成します。ここでこれらすべての変更が行われ、30 ミリ秒後にバッファ キャンバスから画像をキャプチャして実際のキャンバスに表示します。
このようにして、アニメーションは明確になり、ちらつきがなくなります。そのため、ここにそのライブの例があります。
http://aspspider.info/erishaan8/html5rain/
そのコードは次のとおりです。
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>HTML5 Rain</title>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style>
article, aside, figure, footer, header, hgroup,
menu, nav, section { display: block; }
</style>
<script type="text/javascript">
var canvas = null;
var context = null;
var bufferCanvas = null;
var bufferCanvasCtx = null;
var flakeArray = [];
var flakeTimer = null;
var maxFlakes = 200; // Here you may set max flackes to be created
function init() {
//Canvas on Page
canvas = document.getElementById('canvasRain');
context = canvas.getContext("2d");
//Buffer Canvas
bufferCanvas = document.createElement("canvas");
bufferCanvasCtx = bufferCanvas.getContext("2d");
bufferCanvasCtx.canvas.width = context.canvas.width;
bufferCanvasCtx.canvas.height = context.canvas.height;
flakeTimer = setInterval(addFlake, 200);
Draw();
setInterval(animate, 30);
}
function animate() {
Update();
Draw();
}
function addFlake() {
flakeArray[flakeArray.length] = new Flake();
if (flakeArray.length == maxFlakes)
clearInterval(flakeTimer);
}
function blank() {
bufferCanvasCtx.fillStyle = "rgba(0,0,0,0.8)";
bufferCanvasCtx.fillRect(0, 0, bufferCanvasCtx.canvas.width, bufferCanvasCtx.canvas.height);
}
function Update() {
for (var i = 0; i < flakeArray.length; i++) {
if (flakeArray[i].y < context.canvas.height) {
flakeArray[i].y += flakeArray[i].speed;
if (flakeArray[i].y > context.canvas.height)
flakeArray[i].y = -5;
flakeArray[i].x += flakeArray[i].drift;
if (flakeArray[i].x > context.canvas.width)
flakeArray[i].x = 0;
}
}
}
function Flake() {
this.x = Math.round(Math.random() * context.canvas.width);
this.y = -10;
this.drift = Math.random();
this.speed = Math.round(Math.random() * 5) + 1;
this.width = (Math.random() * 3) + 2;
this.height = this.width;
}
function Draw() {
context.save();
blank();
for (var i = 0; i < flakeArray.length; i++) {
bufferCanvasCtx.fillStyle = "white";
bufferCanvasCtx.fillRect(flakeArray[i].x, flakeArray[i].y, flakeArray[i].width, flakeArray[i].height);
}
context.drawImage(bufferCanvas, 0, 0, bufferCanvas.width, bufferCanvas.height);
context.restore();
}
</script>
</head>
<body onload="init()">
<canvas id="canvasRain" width="800px" height="800px">Canvas Not Supported</canvas>
</body>
</html>
また、このヘルプが充実している場合は、回答として受け入れて作成してください。o_O
乾杯!!!