Michael N.: gibt es eine art 'sleep-funktion' ?

Beitrag lesen

Hallo 'SelfHTML gemeinde'...

Ich suche eine möglichkeit in javascript einfach nur eine bestimmte anzahl milisekunden lang zu warten. Gibt
es vielleicht eine funktion wie Sleep(ms) oder Idle(ms)?

Ich kenne setTimeout(), aber die ist für meine zwecke unbrauchbar, weil ich ja keine andere funktion aufrufen oder überhaupt irgend etwas machen möchte außer warten...

Kann mir jemand helfen?

Jou.

Danke...bis dann
/*,*/
Wowbagger

Hallo Wowbagger,

ich hab da so ein kleines ;-) Funktioenchen, was Dir helfen koennte.

<Funktioenchen>

<html>
<head>
<title>Test</title>
<script language="JavaScript">
function now()
{
    var Act = new Date();
    return Act;
}

function sleep()
{
    var DelaySeconds = 5; /* 5 Sekunden Verzoegerung */
    var DelayMinutes = 0; /* 0 Minuten  Verzoegerung */
    var DelayHours   = 0; /* 0 Stunden  Verzoegerung */
    var DelayDays    = 0; /* 0 Tage     Verzoegerung */
    var DelayMonths  = 0; /* 0 Monate   Verzoegerung */
    var DelayYears   = 0; /* 0 Jahre    Verzoegerung */

var ActTime   = new Date();
    var Seconds   = ActTime.getSeconds();
    var Minutes   = ActTime.getMinutes();
    var Hours     = ActTime.getHours();
    var Days      = ActTime.getDate();
    var Months    = ActTime.getMonth();
    var Years     = ActTime.getYear();
    var FinalTime = ActTime;

if ((60 - Seconds) < DelaySeconds)
    {
        Seconds = Seconds + DelaySeconds - 60;
        DelayMinutes = DelayMinutes + 1;
    }
    else
    {
        Seconds = Seconds + DelaySeconds;
    }

if ((60 - Minutes) < DelayMinutes)
    {
        Minutes = Minutes + DelayMinutes - 60;
        DelayHours = DelayHours + 1;
    }
    else
    {
        DelayMinutes = Minutes + DelayMinutes;
    }

if ((24 - Hours) < DelayHours)
    {
        Hours = Hours + DelayHours - 24;
        DelayDays = DelayDays + 1;
    }
    else
    {
        DelayHours = Hours + DelayHours;
    }

switch (Months)
{
  case 0, 2, 4, 6, 7, 9, 11:
   if ((31 - Days) < DelayDays)
   {
    Days = Days + DelayDays - 31;
    DelayMonths = DelayMonths + 1;
   }
   else
   {
    DelayDays = Days + DelayDays;
   }
   break;
  case 3, 5, 8, 10:
   if ((30 - Days) < DelayDays)
   {
    Days = Days + DelayDays - 30;
    DelayMonths = DelayMonths + 1;
   }
   else
   {
    DelayDays = Days + DelayDays;
   }
   break;
  case 1:
   if ((Year % 400) == 0)
   {
    if ((29 - Days) < DelayDays)
    {
     Days = Days + DelayDays - 29;
     DelayMonths = DelayMonths + 1;
    }
    else
    {
     DelayDays = Days + DelayDays;
    }
   }
   else
   {
    if (((Year % 100) == 0) ((Year % 4) != 0))
    {
     if ((28 - Days) < DelayDays)
     {
      Days = Days + DelayDays - 28;
      DelayMonths = DelayMonths + 1;
     }
     else
     {
      DelayDays = Days + DelayDays;
     }
    }
    else
    {
     if ((29 - Days) < DelayDays)
     {
      Days = Days + DelayDays - 29;
      DelayMonths = DelayMonths + 1;
     }
     else
     {
      DelayDays = Days + DelayDays;
     }
    }
   }
   break;
    }

if ((11 - Months) < DelayMonths)
    {
        Months = Months + DelayMonths - 24;
        DelayYears = DelayYears + 1;
    }
    else
    {
        DelayMonths = Months + DelayMonths;
    }
    Years = Years + DelayYears;

FinalTime.setSeconds(Seconds);
FinalTime.setMinutes(Minutes);
FinalTime.setHours(Hours);
FinalTime.setDate(Days);
FinalTime.setMonth(Months);
FinalTime.setYear(Years);

while (now() < FinalTime)
    {
    }

}

</script>
</head><body>
<script language="JavaScript">
var nun = new Date(now());
document.writeln(nun);
sleep();
var jetzt = new Date(now());
document.writeln(jetzt);
</script>
</body></html>

</Funktioenchen>

Wichtig dabei ist, Du musst die kleine Funktion now() auch mitkopieren. Im IE 4.00 klappt das Beispiel mit den Anzeigen, der Netsi 4.x gibt bei den Anzeigen leider "InvalidDate", die Funtionen klappen aber (getestet mittels "alert()").

Michael N.