Biriba: dynamisches Ein/Ausblenden funktioniert nicht in Safari

Hallo zusammen,

ich möchte ein Javascript schreiben mit dem man ein Bild in einer Art Puzzle präsentiert bekommt. Wenn man mit der Maus über die Bildflächen fährt sollen diese kurz aufgedeckt und wieder zugedeckt werden. Nur wenn man eine Fläche anklickt bleibt diese unwiderruflich aufgedeckt. Dieser Teil funktioniert in den gängigsten Browsern (Firefox, IE, Opera).

Zuerst möchte ich aber einen DIV zeigen der A) dem Besucher sagt das er eingeschaltetes Javascript benötigt wenn es abgeschaltet ist (<noscript>), und/oder B) das Puzzle solange abdeckt bis alle Bilder geladen sind. Das überprüfe ich in einer setTimeout-Schleife mit document.images[i].complete.

Ein Freund hat die Testseite mit Safari angesehen und dort blendet sich das DIV nicht aus. Selber habe ich keinen Safari (Mac) zur Verfügung.

Kann jemand mit einem Safari und besseren Javascript-Kenntnissen als ich, sich die Seite mal anschauen und mir einen Tipp geben was ich für einen Fehler gemacht habe? (Es genügt sehr wahrscheinlich auch wenn jemand mit Javascript-Kenntnissen _ohne_ Safari sich die Seite mal anschaut ;-)).

http://test.biriba.de

Viele Grüße,
Biriba

  1. Hi,

    Das überprüfe ich in einer setTimeout-Schleife mit document.images[i].complete.

    Vermutlich hat Safari, wie andere Browser auch, Schwierigkeiten mit complete. Überprüfe den Ladezustand mit onload.

    Entweder bei den einzelnen Images, oder, einfacher *und* besser, beim BODY.

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. Hallo Cybaer,

      Das überprüfe ich in einer setTimeout-Schleife mit document.images[i].complete.

      Vermutlich hat Safari, wie andere Browser auch, Schwierigkeiten mit complete. Überprüfe den Ladezustand mit onload.

      Entweder bei den einzelnen Images, oder, einfacher *und* besser, beim BODY.

      Ok, probiere ich. (Muß ich aber erst mal nachschauen/probieren wie das geht. Deshalb kanns was dauern.)

      Danke für den Tipp,
      Biriba

      1. Hi,

        Ok, probiere ich. (Muß ich aber erst mal nachschauen/probieren wie das geht. Deshalb kanns was dauern.)

        Na ja: <body onLoad="loadingdone();">

        Und in die Funktion loadingdone dann rein, was Du bei complete machen wolltest.

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. Hi Cybaer,

          Na ja: <body onLoad="loadingdone();">

          Und in die Funktion loadingdone dann rein, was Du bei complete machen wolltest.

          JaJa,: <body onLoad="lade_status();"> ist mir schon klar, ;-)

          nur was ich anstelle von document.images[i].complete prüfen kann, habe ich noch nicht gecheckt. Ich bin aber gerade auch auf der Arbeit, und kann erst heute abend in Ruhe danach schauen und weitermachen, ;-)

          Meine bisherige Funktion:

          function lade_status()
           {
            var Status = 0;
            for(i = 0; i < document.images.length; ++i)
            {
             Status = (document.images[i].complete == true) ? ++Status : Status;
            }
            if(Status == document.images.length)
            {
             document.getElementById('loadmessage').style.visibility = 'hidden';
            }
            else
            {
             setTimeout("lade_status()", 700);
            }
           }

          <Geistesblitz>... oder meinst Du, es reicht schon aus, beim onLoad-Ereignis das DIV auszublenden, weil beim OnLoad-Ereignis schon die Seite inklusive der Images geladen ist?</Geistesblitz>

          Dann würde es ja so schon reichen:

          <body onLoad="lade_status();">

          function lade_status()
          {
              document.getElementById('loadmessage').style.visibility = 'hidden';
          }

          Viele Grüße,
          Biriba

          1. hi,

            nur was ich anstelle von document.images[i].complete prüfen kann, habe ich noch nicht gecheckt.

            onLoad sollte (je nach browser) auch auf einem bild funktionieren.

            hierbei müsste dann aber jedes bild einzeln seine "rückmeldung" geben, also bspw. ein entsprechendes flag setzen, "ich, bild nummer 14, bin jetzt fertig geladen".

            und dann noch abfragen, ob (und wann) _alle_ betreffenden bilder ihre erfolgsmeldung abgegeben haben ...

            gruß,
            wahsaga

            --
            "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
          2. Hi,

            <Geistesblitz>... oder meinst Du, es reicht schon aus, beim onLoad-Ereignis das DIV auszublenden, weil beim OnLoad-Ereignis schon die Seite inklusive der Images geladen ist?</Geistesblitz>

            Exakt! :-)

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            1. Hi Cybaer,

              <Geistesblitz>... oder meinst Du, es reicht schon aus, beim onLoad-Ereignis das DIV auszublenden, weil beim OnLoad-Ereignis schon die Seite inklusive der Images geladen ist?</Geistesblitz>

              Exakt! :-)

              Cool. Hab's gerade reingeschrieben in die Datei, ich meine, ich habe den Überflüssigen Kram rausgenommen, ;-)

              Thank's!