Funktion mit Onload vom Body nur einmal ausführen

  • Themenstarter Themenstarter GMT
  • Beginndatum Beginndatum
G

GMT

Gast
Hallo,

ich hab ein Problem mit meiner Homepage. Unzwar möchte ich gerne ein Fenster bzw. ein Div Ausfahren und wieder Einfahren.
Natürlich mir Javascript ;-)

Hier mein Code:

Java:
<script type="text/javascript">
var sicherung=new Array();
var active=new Array();
var speed=3 ;

function startstopp()
{
	changeDiv('top3')
	setTimeout (startstopp, 8000);
	changeDiv('top3')
}


function changeDiv(id)
{
    var object=document.getElementById(id);
    var hoehe=object.style.height;
    var sichtbar=object.style.display;
    var nr=id.substr(-1);
    if(active[nr]!=false && active[nr]!=true)
        active[nr]=false;
    if(active[nr]==false)
    {
        active[nr]=true;
        if (sichtbar=='none')
        {
            object.style.height='0px';
            object.style.display='block';
            changeDivRek(id,'0',hoehe.substr(0,3));
        }
        else
        {
            sicherung[nr]=0;
            changeDivRek(id,hoehe.substr(0,(hoehe.length-2)),'0');
        }
    }
}
function changeDivRek(id,curHeight,maxHeight)
{
    var object=document.getElementById(id);
    var nr=id.substr(-1);
    curHeight=parseInt(curHeight);
    if(curHeight < maxHeight)
    {
        curHeight+=speed;
    }
    else
    {
        if(sicherung[nr]==0)
            sicherung[nr]=curHeight;
        curHeight-=speed;
    }
    object.style.height=curHeight+'px';
    if(curHeight == 0 || (curHeight>=maxHeight && maxHeight!=0))
    {
        if(curHeight <= 0)
        {
            object.style.display='none';
            object.style.height=''+sicherung[nr]+'px';
        }
        active[nr]=false;
    }
    else
    {
    window.setTimeout(function() {changeDivRek(id,curHeight,maxHeight)}, 20);
    }
}
</script>

So also starte ich beim:
HTML:
<body onload="startstopp()">
Die StartStopp Funktion die Das Fenster rausfahren soll 8000 ms warten soll dann wieder einfahren soll. Komischer Weise macht er das dann die ganze Zeit es hört nicht auf wie kann ich das lösen?

Grüße GMT
 
Dann solltest du das Problem aber vielleicht lieber in nem Javascript Forum stellen bzw. hier im Javascript Unterforum.
 
Du machst einen rekursiven Funktionsaufruf:
HTML:
function startstopp()
{
    changeDiv('top3')
    setTimeout (startstopp, 8000);
    changeDiv('top3')
}
Du müsstest schon eine Abbruchbedingung einfädeln, ansonsten verhedderst du dich in einer Endlosschleife, weil du jedes Mal wieder in die startstopp() reinspringst. Erfinde eine Variable isDone, die zu Beginn der Funktion geprüft wird. Ist sie bereits da, soll nichts weiter unternommen werden, ansonsten führe den Rest aus.
 
[XML]
<!--mach mal so:-->
<body onload="changeDiv('top3');setTimeout (function(){changeDiv('top3')}, 8000);void(0);">
[/XML]

Gruß!
 
Die Idee hatte ich auch schon, habe sie dann allerdings nicht geschrieben, weil sie doch schon sehr hässlich aussieht (mittem im html-Code Skripte zu schreiben finde ich immer ziemlich unübersichtlich). Besser wäre an der Stelle einfach den Code in eine Hilfsfunktion zu wursten und diese Funktion dann von onLoad aus aufzurufen.
 
Dann machste es halt so:
[XML]
function startstopp()
{
changeDiv('top3');
setTimeout (function(){changeDiv('top3')}, 8000);
}

<!-- im HTML dann -->
<body onload="startstopp();">
[/XML]
 

Zurück
Oben