0

一定時間後に雪をきれいにするにはどうすればよいですか。変数を使用して、falseに切り替わり、makesnow()関数を停止するタイムアウトを呼び出してみましたが、ページがまったくクリアされていないようです。

<script language="javascript">


ns6 = document.getElementById;
ns  = document.layers;
ie  = document.all;


/*******************[AccessCSS]***********************************/
function accessCSS(layerID) {                                                                   //
  if(ns6){ return document.getElementById(layerID).style;}     //
   else if(ie){ return document.all[layerID].style; }         //
    else if(ns){ return document.layers[layerID]; }          //
}/***********************************************************/


/**************************[move Layer]*************************************/
function move(layer,x,y)  { accessCSS(layer).left=x; accessCSS(layer).top = y; } 


function browserBredde() {
    if (window.innerWidth) return window.innerWidth;
    else if (document.body.clientWidth) return document.body.clientWidth;
    else return 1024;
}

function browserHoyde() {

        if (window.innerHeight) return window.innerHeight;
        else if (document.body.clientHeight) return document.body.clientHeight;
        else return 800;
}

function makeDiv(objName,parentDiv,w,h,content,x,y,overfl,positionType)
{     
      // positionType could be 'absolute' or 'relative'

        if (parentDiv==null) parentDiv='body';

    var oDiv = document.createElement ("DIV");
    oDiv.id = objName;

        if (w) oDiv.style.width = w;
        if (h) oDiv.style.height= h;


      if (content) oDiv.innerHTML=content;
      if (positionType==null) positionType="absolute";
        oDiv.style.position = positionType;
        if (x) oDiv.style.left=x; else oDiv.style.left=-2000;
        if (y) oDiv.style.top=y; else oDiv.style.top=-2000;


        if (overfl) oDiv.style.overflow=overfl; else oDiv.style.overflow="hidden";
    eval('  document.'+parentDiv+'.appendChild (oDiv);  ');

    delete oDiv;
}

var snowC=0;
var x = new Array();
var y = new Array();
var speed = new Array();
var t=0;
var cC = new Array();
var ra = new Array();



function makeSnow() {
    x[snowC] = Math.round(Math.random()*(browserBredde()-60));
    y[snowC] = 10;
    makeDiv("snow"+snowC,"body",32,32,'<img src="http://i693.photobucket.com/albums/vv296/KIBBLESGRAMMY/CAT/Orange-tabby-cat-icon.gif">');
    speed[snowC] = Math.round(Math.random()*8)+1;
    cC[snowC]=Math.random()*10;
    ra[snowC] = Math.random()*7;
    snowC++;        
}



function moveSnow() {
    var r = Math.round(Math.random()*100);
    if (r>70 && snowC<20) makeSnow();
    for (t=0;t<snowC;t++) {
        y[t]+=speed[t];move("snow"+t,x[t],y[t]);
        if (y[t]>browserHoyde()-50) {y[t] = 10;x[t] = Math.round(Math.random()*(browserBredde()-60));}
        cC[t]+=0.01;
        x[t]+=Math.cos(cC[t]*ra[t]);

    }

    setTimeout('moveSnow()',20);
}

moveSnow();



</script>
4

4 に答える 4

0

タイムアウトは役に立ちません。新しいsnowdivの作成を停止するだけですが、makeDivが本体に新しいdivを作成するものである場合は、クリア/表示します。makeDivで作成されたdivがクリアされることを願っています。画面上のすべてのdiv。

于 2012-09-27T07:12:07.697 に答える
0

作成されたdivを削除する必要があります。(で)作成するときに「.snowflake」などのクラスをすべて与えてmakeDivから、domから削除する方が簡単な場合があります。

于 2012-09-27T07:12:20.677 に答える
0

makeSnow雪片を追加するだけです。あなたが言うように、それを止めても何もクリアされません。moveSnowアニメーションを処理し、タイムアウト時に自分自身を呼び出します。moveSnow毎回次のタイムアウトを設定する代わりに、 1回だけ間隔で実行するように設定すると、停止するのが簡単になります。

window.snowAnimation = window.setInterval(moveSnow, 20);

スノーフレークにcssクラスを追加すると、削除の対象にするのが簡単になります。

oDiv.className = 'snowflake';

次に、clear関数は次のようになります。

function clearSnow() {
   window.clearTimeout(window.snowAnimation);
   var flakes = document.getElementsByTagName('snowflake');
   for(var i = 0, l = flakes.length; i < l; i++) {
      document.body.removeChild(flakes[i]);
   }
}
于 2012-09-27T07:19:52.887 に答える
0

雪が降るのを止めたい時間の後に作成された要素をクリアする必要があります。次のコードスニペットは、要素をクリアするのに役立ちます

    if(count < 500){
        setTimeout('moveSnow()',20);
    }else{
        var i = 0;
        var elem = document.getElementById('snow'+i);
        do{
        elem.parentNode.removeChild(elem);
        elem = document.getElementById('snow'+ ++i);
        }while(elem != null)
    }
    count++;

グローバル変数カウントを作成する必要があります。

于 2012-09-27T07:21:29.283 に答える