私は雪片を試したコードです。すべてが大丈夫ですが、スクリプトが応答しなくなるという一定の期間(ブラウザのFirefoxを遅くします)。 なぜこれが起こるのかわかりません。 ブラウザに何もせずに応答性の高いものにするにはどうすればよいですか。 は、ここで私はそれが応答スクリプトいずれかを起こさないことができますどのようにFIDDLE関数をループするとJavaScriptが応答しなくなる
です。! は私はjavascript関数をループでミスを犯した:( 任意の提案は素晴らしいことだと思います
おかげ
Javascriptを:。
// window.setInterval(generateSnow, 0);
var windowHeight = jQuery(document).height();
var windowWidth = jQuery(window).width();
function generateSnow() {
for (i = 0; i < 4; i++) {
var snowTop = Math.floor(Math.random() * (windowHeight));
snowTop = 0;
var snowLeft = Math.floor(Math.random() * (windowWidth - 2));
var imageSize = Math.floor(Math.random() * 20);
jQuery('body').append(
jQuery('<div />')
.addClass('snow')
.css('top', snowTop)
.css('left', snowLeft)
.css('position', 'absolute')
.html('*')
);
}
}
function snowFalling() {
jQuery('.snow').each(function(key, value) {
if (parseInt(jQuery(this).css('top')) > windowHeight - 80) {
jQuery(this).remove();
}
var fallingSpeed = Math.floor(Math.random() * 5 + 1);
var movingDirection = Math.floor(Math.random() * 2);
var currentTop = parseInt(jQuery(this).css('top'));
var currentLeft = parseInt(jQuery(this).css('left'));
jQuery(this).css('top', currentTop + fallingSpeed);
if (movingDirection === 0) {
jQuery(this).css('bottom', currentLeft + fallingSpeed);
} else {
jQuery(this).css('bottom', currentLeft + -(fallingSpeed));
}
});
}
window.setInterval(snowFalling, 15);
window.setInterval(generateSnow, 1000);
完全な答えではないので、それは単なるコメントですが、そのような動きをスクリプト化する必要はありません。 CSSのトランジションやjQueryのアニメーションを使用することができます。スノーフレークを作成し、アニメーションのタイプと長さを設定し、最後にコールバックを削除するだけです。上記よりもはるかに簡単で、レスポンスの問題はありません(愚かな場合を除きます: – Archer
)。この種のアプリケーションは、DOM操作ではなくHTMLキャンバスを使用する方がはるかに適しています。 –
私はdomの挿入数を減らし、絶対位置から固定位置への切り替えと、ブラウザアニメーションフレームでのアニメーションの実行によって、ソリューションを最適化しようとしました。http://jsfiddle.net/7BFCM/7/これはまだintesiveなCPUなので、私はいくつかのキャンバスソリューションのためにgoogleを使っています。 http://www.techumber.com/2013/01/HTML5-Canvas-Tutorial-On-Creating-Snowfall-Effect.html –