さて、画面に雪片が落ちる小さなアニメーションがあり、setTimeout
それを動かすために使用しました。私はこれまでのところ(少なくともChromeでは)見た目が気に入っています。現在、相互互換性に取り組んでおり、Firefoxを見ていますが、動きが非常に遅いです。正直なところ、このsetTimeout
関数は5msに設定されており、5 msごとに1pxしか移動しません(200 fpsの速度)が、その速度で実行する必要があります。それを回避するための巧妙なハックはありますか?Firefoxはどのくらいの速度で関数を繰り返しますか?また、補足:IE9でも機能しません(<8は気にしません)。それらは1秒間移動し、画面の下部に到達してから停止します(上部から再開したい)。
どんな助けでも大歓迎です!
あなたがスキップしない場合の私のコード(あなたがそれを通り抜けたい場合)"//begin actual function"
:
var width = window.outerWidth;
var height = window.outerHeight;
//foreground
var curWidth = width - 90;
var h2 = height * 5;
var tbvar;
function TB() {
//random flake
var flakeSrc = ['images/1.png','images/2.png','images/3.png','images/4.png'];
var randImg1 = Math.floor(Math.random() * flakeSrc.length );
var randImg2 = Math.floor(Math.random() * flakeSrc.length );
var randImg3 = Math.floor(Math.random() * flakeSrc.length );
var randImg4 = Math.floor(Math.random() * flakeSrc.length );
var randImg5 = Math.floor(Math.random() * flakeSrc.length );
//random horizontal position array
var left = [];
var one = 1;
do {
one++;
left.push(one)
}
while (one <= curWidth);
var rand1 = Math.floor(Math.random() * left.length );
var rand2 = Math.floor(Math.random() * left.length );
var rand3 = Math.floor(Math.random() * left.length );
var rand4 = Math.floor(Math.random() * left.length );
var rand5 = Math.floor(Math.random() * left.length );
//////////////begin actual function/////////////////////////////////////////////
clearTimeout(tbvar);
tbvar=setTimeout(function(){
//find top positions
var top1 = document.getElementById("flake1").offsetTop;
var top2 = document.getElementById("flake2").offsetTop;
var top3 = document.getElementById("flake3").offsetTop;
var top4 = document.getElementById("flake4").offsetTop;
var top5 = document.getElementById("flake5").offsetTop;
//add 1
top1++;
top2++;
top3++;
top4++;
top5++;
//change top positions
document.getElementById("flake1").style.top = top1 + "px";
document.getElementById("flake2").style.top = top2 + "px";
document.getElementById("flake3").style.top = top3 + "px";
document.getElementById("flake4").style.top = top4 + "px";
document.getElementById("flake5").style.top = top5 + "px";
//end of screen statements
if (top1 == height) {
//top1 == "-180px";
document.getElementById("flake1").style.top = "-180px";
document.getElementById("flake1").style.left = rand1 + "px";
document.getElementById('flake1').src = flakeSrc[randImg1];
}
if (top2 == height) {
//top2 == "-180px";
document.getElementById("flake2").style.top = "-180px";
document.getElementById("flake2").style.left = rand2 + "px";
document.getElementById('flake2').src = flakeSrc[randImg2];
}
if (top3 == height) {
//top3 == "-180px";
document.getElementById("flake3").style.top = "-180px";
document.getElementById("flake3").style.left = rand3 + "px";
document.getElementById('flake3').src = flakeSrc[randImg3];
}
if (top4 == height) {
//top4 == "-180px";
document.getElementById("flake4").style.top = "-180px";
document.getElementById("flake4").style.left = rand4 + "px";
document.getElementById('flake4').src = flakeSrc[randImg4];
}
if (top5 == height) {
//top5 == "-180px";
document.getElementById("flake5").style.top = "-180px";
document.getElementById("flake5").style.left = rand5 + "px";
document.getElementById('flake5').src = flakeSrc[randImg5];
}
TB();
}, 5);
}
TB();
プロジェクト全体の動作を確認したい場合:http://fudgepants.com/snow/snow.html
私が話しているのは、小さな雪ではなく、大きな雪です。
ありがとう!