Enrico: Foto-Galerie ---> Fertig :-) ---> Countdown vor Popup

Sodalla,

Nach einer langen und anstrengenden "Nachtschicht" habe ich nun unsere Fotogalerie mit Auswahl der anzuzeigenden Galerie, der Anzeige der Vorschaubilder und Anzeige der Fotos in Originalgrösse bei MouseOver in einer einzigen PHP-Datei endlich, endlich, endlich fertiggestellt.

Nun gibt es aber noch einen Gesichtspunkt, der mir nicht gefällt:

Das Foto in Originalgrösse wird bei MouseOver sofort angezeigt und verdeckt dadurch natürlich die darunter liegenden Fotos zum Teil. Die Überlappung ist auch kein Problem. Nur dass das grosse Foto sofort geöffnet wird, entspricht nicht ganz meinen Vorstellungen.

Die Vorschau-Bilder und die Fotos in Originalgrösse als bei OnMouseOver anzuzeigende Tooltips werden eingelesen (die Vorschaubilder in das Array $Bilder und die grossen Fotos in das Array $Grossansicht - ersteres ist hier nicht aufgeführt).

Die Vorschau-Bilder und die grossen Fotos werden - wie nachfolgend - in einer Schleife am Bildschirm ausgegeben bzw. in eigenen Div-Bereichen organisiert:

for ($i = 0; $i < sizeof ($Bilder); $i++)
{
  $Grossansicht [] = str_replace ("klein", "gross", $Bilder [$i]);
  echo "<div id='" . $i . "' class='tip'><img border='0' src='" . $Grossansicht [$i] . "'></div>";

?>

... HTML-Tabelle ...

<a href="#"
     onmouseout="popUp(event,'<?php echo $i ?>')"
     onmouseover="popUp(event,'<?php echo $i ?>')"
     onclick="return false">
     <img border="0" src="<?php echo $Bilder [$i] ?>">
  </a>

... HTML-Tabelle ...

<?php

... weiterer Code ...
}

Eine Funktion zeitverzögert aufzurufen, funktioniert über die Anweisung setTimeout('FUNKTION()', VERZÖGERUNG).

Wenn ich nun aber diesen Befehl auf meine PHP-Datei umlege, dann werden die grossen Fotos gar nicht mehr richtig angezeigt:

onmouseover="setTimeout('popUp(event,'<?php echo $i ?>')',1500)"

Die grossen Fotos werden zwar angezeigt, aber nicht mehr richtig geschlossen. Auch gibt es Probleme, wenn ich den Mauszeiger schnell über mehrere Vorschau-Bilder bewege.

Damit scheidet diese Möglichkeit - zumindest wie sie jetzt erstellt ist - leider aus.

Deswegen habe ich mir nun vorgestellt, dass es ganz ratsam wäre, die grossen Fotos mit einer kleiner Animation zeitverzögert darzustellen.

Hierzu habe ich drei Grafiken erstellt, die wie folgt gewechselt werden sollen:

MouseOver:
1. Sofortige Anzeige der Grafik "L_countdown_3.png"
2. Nach 1 Sekunde: Austausch der Grafik "L_countdown_3.png" gegen "L_countdown_2.png"
3. Nach 1 Sekunde: Austausch der Grafik "L_countdown_2.png" gegen "L_countdown_1.png"
4. Nach 1 Sekunde: Austausch der Grafik "L_countdown_1.png" gegen "L_countdown_0.png"
5. Nach 1 Sekunde: Anzeige des grossen Fotos

MouseOut:
Sofortiges Stoppen der Animation

Ist meine Vorstellung umsetzbar ?

Vielen Dank für Eure Antworten.

Gruss, Enrico

=-=-=-=-=-=-=

Der Vollständigkeit halber hier der Quelltext für die Tooltip-Datei:

var DH = 0;
var an = 0;
var al = 0;
var ai = 0;

if (document.getElementById)
{
  ai = 1;
  DH = 1;
}
else
{
  if (document.all)
  {
    al = 1;
    DH = 1;
  }
  else
  {
    browserVersion = parseInt (navigator.appVersion);

if ((navigator.appName.indexOf ('Netscape') != -1) && (browserVersion == 4))
    {
      an = 1;
      DH = 1;
    }
  }
}

function fd (oi, ws)
{
  if (ws == 1)
  {
    if (ai)
      return (document.getElementById(oi).style);
    else
    {
      if (al)
        return (document.all[oi].style);
      else
      {
        if (an)
          return (document.layers[oi]);
      }
    }
  }
  else
  {
    if (ai)
      return (document.getElementById(oi));
    else
    {
      if (al)
        return (document.all[oi]);
      else
      {
        if (an)
          return (document.layers[oi]);
      }
    }
  }
}

function pw ()
{
  if (window.innerWidth != null)
    return window.innerWidth;

if (document.body.clientWidth != null)
    return document.body.clientWidth;

return (null);
}

function popUp (evt, oi)
{
  if (DH)
  {
    var wp = pw ();
    ds = fd (oi, 1);
    dm = fd (oi, 0);
    st = ds.visibility;

if (dm.offsetWidth)
      ew = dm.offsetWidth;
    else
      if (dm.clip.width)
        ew = dm.clip.width;

if (st == "visible" || st == "show")
      ds.visibility = "hidden";
    else
    {
      if (evt.y || evt.pageY)
      {
        if (evt.pageY)
        {
          tv = evt.pageY + 20;
          lv = evt.pageX - (ew / 4);
        }
        else
        {
          tv = evt.y + 20 + document.body.scrollTop;
          lv = evt.x  - (ew / 4) + document.body.scrollLeft;
        }

if (lv < 2)
          lv = 2;
        else
          if (lv + ew > wp)
            lv -= ew / 2;

if (!an)
        {
          lv += 'px';
          tv += 'px'
        }

ds.left = lv;
        ds.top = tv;
      }
      ds.visibility = "visible";
    }
  }
}

  1. Hallo Enrico,

    Ich hab mir jetzt nicht den Code durchgelesen, aber zwei Punkte:

    1. würde ich nie gleich alle großen Bilder mitliefern, ohne sie zu zeigen. Ich habe einen 48kb-Zugang. Du weißt was das bedeutet? Genau, ich mache Deine Seite wieder zu.

    2. die Bilder gehen wohl nicht wieder zu, weil sie die mouseover-Bereiche verdecken, dann existiert das mouseout-Ereignis nicht mehr.

    3. (dritte von zwei Bemerkungen, hehe). Laß dem User seinen Klick. Es ist für Dich wesentliche einfacher zu programmieren und für den User wesentlich angenehmer zu bedienen. Diese Automatik kommt einem immer nur als Anbieter so klasse vor, weil man sich den 'idealen' Nutzungsvorgang so und so vorstellt. Der muß aber überhaupt nicht mit den Vorstellungen des Users übereinstimmen. _Du_ weißt, was kommt und findest das mouseover vielleicht praktisch, der _User_ weiß das nicht und findet es vielleicht eher nervig und bevormundend, wenn da Bilder aufgehen, nur weil er zufällig die Maus bewegt hat.

    4. (hehehe) daß JavaScript ohnehin fragwürdig ist, weißt Du ja wahrscheinlich.

    Gruß, Andreas

    --
    <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
    hier könnte auch ruhig mal'n neues Bild stehen.
  2. Hi,

    warum stellst Du die Seite nicht einfach online, so daß man das Problem und vor allem den Code, der zum Browser geht, sehen kann? So ist das doch sehr unübersichtlich. Der PHP-Code selbst dürfte für das Javascript-Problem irrelevant sein, so daß Du - wenn Du schon Code postest - den tatsächlich ausgelieferten angeben solltest. Und wenn es doch ein PHP-Problem sein sollte, dann wäre der Themenbereich falsch gewählt.

    freundliche Grüße
    Ingo