この記事の例では、HTML5 キャンバスに基づいて雪の効果を実現する方法について説明します。この例を実行すると、素晴らしい雪の効果を確認できます。以下に示すように: メインコードは次のとおりです: コードをコピーしますコードは次のとおりです: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/1999/xhtml">漫天飞雪 <br>* {マージン: 0;パディング: 0;}</p> <p>body {<br> /*ここでは任意の種類の背景を使用できます。*/<br> 背景: #6b92b9;<br>}<br>キャンバス {<br> 表示: ブロック;<br>} <br> < /canvas> <br>window.onload = function(){<br> //canvas init<br> var Canvas = document.getElementById("canvas");<br> var ctx = Canvas.getContext ("2d");<br> <br> //キャンバスの寸法<br> var W = window.innerWidth;<br> var H = window.innerHeight;<br> Canvas.width = W;<br> キャンバス。 height = H;<br> <br> //雪の結晶の粒子<br> var mp = 3000; //最大粒子<br> var粒子 = [];<br> for(var i = 0; i {<br> 粒子.push({<br> x: Math.random ()*W, //x 座標<br> y: Math.random()*H, //y 座標<br> r: Math.random()*3 1, //radius<br> d: Math.random()*mp //density<br> })<br> }<br> <br> //フレークを描画しましょう<br> functiondraw()<br> {<br> ctx.clearRect(0 , 0, W, H);<br> <br> ctx.fillStyle = "rgba(255, 255, 255, 0.8)";<br> /* ctx.fillStyle = "#FF0000";*/<br> ctx.beginPath();<br> for(var i = 0; i <mp i></mp> {<br> var p =加速度[i];<br> ctx.moveTo(p.x, p.y); <br> ctx.arc(p.x, p.y, p.r, 0, Math.PI*2, true);<br> }<br> ctx.fill();<br> update();<br> }<br> <br> //雪の結晶を移動する関数<br> //角度は継続的な増分フラグになります。 Sin 関数と Cos 関数が適用されて、フレークの垂直方向と水平方向の動きが作成されます<br> var angle = 0;<br> function update()<br> {<br> angle = 0.01;<br> for(var i = 0; i < mp i )<br /> {<br /> var p = tongue[i];<br /> //X 座標と Y 座標を更新します<br /> //cos 関数に 1 を加算しますフレークが上向きに移動する負の値を防止します<br /> //すべてのパーティクルには独自の密度があり、これを使用してフレークごとに下向きの動きを変えることができます<br /> //半径を追加してよりランダムにしましょう<br /> p.y = Math.cos(angle p.d) 1 p.r/2;<br /> p.x = Math.sin(angle) * 2;<br /> <br /> //終了時に上からフレークを送り返す<br /> //もう少し有機的にして、左右からもフレークを入れてみましょう。<br /> if(p.x > W || p.x < 0 || p.y > H)<br> {<br> if (i%3 > 0) //66.67% のフレーク<br> {<br> 粒子[i] = {x: Math.random()*W, y: -10, r: p.r, d: p.d };<br> }<br> else<br> {<br> //フレークが右から出ている場合<br> if(Math.sin(angle) > 0)<br> {<br> //<br> 粒子[i] = {x: -5, y: Math.random()*H, r: p.r, d: p.d};<br> } から入力します。 <br> else<br> {<br> //右から入力<br>articles[i] = {x: W 5, y: Math.random()*H, r: p.r, d: p.d}; <br> }<br> }<br> }<br> }<br> }<br> <br> //アニメーションループ<br> setInterval(draw, 15);<br>}<br></スクリプト><br></body><br></html></div> <p>代码分析以下:</p> <p>本行代改变雪花半径大小:</p> <p><br></p> <div class="msgheader"> <div class="right"><span style="CURSOR: pointer" onclick="copycode(getid('phpcode69'));"><u>复制代码</u></span></div>代码如下:</div> <div class="msgborder" id="phpcode69">r: Math.random()*3 1, //半径</div> <p>このコード行は雪の結晶の落下速度を変更します: </p> <p><br></p> <div class="msgheader"> <div class="right"><span style="CURSOR: pointer" onclick="copycode(getid('phpcode70'));"><u>コードをコピーします</u></span></div>コードは次のとおりです:</div> <div class="msgborder" id="phpcode70">setInterval(draw, 15);</div> <p>この行は雪の結晶の密度を変更します: </p> <p><br></p> <div class="msgheader"> <div class="right"><span style="CURSOR: pointer" onclick="copycode(getid('phpcode71'));"><u>コードをコピーします</u></span></div>コードは次のとおりです。</div> <div class="msgborder" id="phpcode71">var mp = 3000; </div> <p>この記事で説明されている内容は、皆様の HTML5 WEB プログラミングにとって一定の参考になると思います。 </p>