# Funktion mit Onload vom Body nur einmal ausführen



## GMT (1. Apr 2012)

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:


```
<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:

```
<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


----------



## Final_Striker (1. Apr 2012)

schau mal hier: *http://www.java-forum.org/top-fragen/5566-java-javascript.html*


----------



## GMT (1. Apr 2012)

Hab ich gesagt das ich von Java rede?


----------



## Gast2 (1. Apr 2012)

Dann solltest du das Problem aber vielleicht lieber in nem Javascript Forum stellen bzw. hier im Javascript Unterforum.


----------



## irgendjemand (1. Apr 2012)

GMT hat gesagt.:


> Hab ich gesagt das ich von Java rede?



ja ... weil du bist hier in einem *JAVA* forum ...

für JS-fragen bitte ins JS-subforum oder in anderen foren ... aber JS gehört hier *NICHT* hin ...


----------



## Noctarius (2. Apr 2012)

*verschubst*


----------



## HimBromBeere (2. Apr 2012)

Du machst einen rekursiven Funktionsaufruf:


> ```
> function startstopp()
> {
> 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.


----------



## jwiesmann (2. Apr 2012)

[XML]
<!--mach mal so:-->
<body onload="changeDiv('top3');setTimeout (function(){changeDiv('top3')}, 8000);void(0);">
[/XML]

Gruß!


----------



## HimBromBeere (2. Apr 2012)

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.


----------



## jwiesmann (2. Apr 2012)

Dann machste es halt so:
[XML]
function startstopp()
{
    changeDiv('top3');
    setTimeout (function(){changeDiv('top3')}, 8000);
}

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


----------

