0

我怎样才能在一定时间后使雪变清。我试过使用变量和调用超时,它切换到 false 并停止 makenow() 函数,但这似乎根本没有清除页面。

<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

makeSnow只是添加了雪花。正如你所说,停止它并不能清除任何东西。moveSnow处理动画,并在超时时调用自身。moveSnow如果不是每次都为下一次设置超时,而是将其设置为仅以间隔运行一次,那么您将更容易停止它。

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 回答
0

您需要删除创建的 div。如果您在创建它们时给它们都赋予某种类,例如“.snowflake”(在 中makeDiv),然后开始从 dom 中删除它们,这可能会更容易。

于 2012-09-27T07:12:20.677 回答
0

超时无济于事,它只会帮助您停止创建新的 snowdiv,但是如果您看到 makeDiv 是在身体上创建新 div 的那个,如果您清除/显示:没有在 makeDiv 上创建的 div 我希望它会清除屏幕上的所有 div。

于 2012-09-27T07:12:07.697 回答