• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bildergalerie - mehrere Anfängerprobleme

Status
Für weitere Antworten geschlossen.

Bernhard

Neues Mitglied
Hallo @ alle,

ich bin völlig neu hier und blutiger Anfänger in JavaScript.
Bitte um Tipps zur Erstellung einer Bildergalerie. Hab bereits sehr viel gesucht, aber nicht das richtige gefunden, bzw. das, was ich gefunden habe, nicht verstanden.

Ich habe vor, eine Bildergalerie zu erstellen. Die Funktion sollte aus nachstehendem Code eigentlich bereits erkennbar sein, auch wenn etliches nicht so funktioniert, wie es soll (die Pfeile sollen mal rechts und links neben dem Bild bzw. den Thumbnails stehen, das mache ich mittels CSS, ist also kein Problem):
  • bei Klick auf einen Pfeil neben dem großen Bild soll das nächste bzw. das vorhergehende angezeigt werden, das funktioniert bislang halbwegs.
  • gleichzeitig soll dann als zweiter Thumb der zum großen Bild gehörende angezeigt werden, als erster der zum vorhergehenden, als dritter der zum nachfolgenden (idealerweise sollte der "aktive" auch noch hervorgehoben werden, wobei ich glaube, dass ich das hinbekomme).
  • bei Klick auf einen Pfeil neben den Thumbs "bewegen" sich diese in die entsprechende Richtung um ein Bild weiter, ohne das große Bild zu beeinflussen (das funktioniert quasi noch gar nicht, IE bewegt nur den letzten, FF nur den ersten).
  • bei Klick auf einen Thumb wird das dazugehörende Bild in groß angezeigt (und idealerweise der Thumb als "aktiv" markiert, aber das werde ich erstmal selbst versuchen, wenn der Rest funktioniert)
Code:
<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script language="javascript">
var num = 8; // Anzahl der Bilder
function foto(i) {
    if (document.images) {
    img = new Array();
    if (n > num) n = 1;
    if (n < 1) n = num;
    var m = n;
    img[i]=new Image();
    img[i].src="img/bild-"+i+".jpg";
    document.images.bild.src=img[i].src;
    }
}
function scrollThumbs(i) {
    if (document.images) {
    img = new Array();
    if (m > num) m = 1;
    if (m < 1) m = num;
    img[i]=new Image();
    img[i].src="thumbs/bild-"+i+".jpg";
    document.images.thumb.src=img[i].src;
    }
}
</script>
</head>

<body>
                <script>
                var n = 2;
                var m = 2;
                var m1 = (m-1);
                var m2 = (m);
                var m3 = (m+1);
                var m4 = (m+2);
                </script>
                <img src="img/bild-1.jpg" name="bild" alt="" title="" width="400" height="300" />
                </div>
                <a href="javascript:foto(n--)" class="pfeil-li">
                <img src="img/pfeil-li.gif" alt="vorheriges Bild" title="" width="100" height="45" />
                </a>
                <a href="javascript:foto(n++)" class="pfeil-re">
                <img src="img/pfeil-re.gif" alt="n&auml;chstes Bild" title="" width="100" height="45" />
                </a>
                <ul>
                    <li>
                        <a href="javascript:foto(m1)"><img src="thumbs/bild-1.jpg" name="thumb" alt="" title="" width="200" height="150" /></a>
                        <a href="javascript:foto(m2)"><img src="thumbs/bild-2.jpg" name="thumb" alt="" title="" width="200" height="150" /></a>
                        <a href="javascript:foto(m3)"><img src="thumbs/bild-3.jpg" name="thumb" alt="" title="" width="200" height="150" /></a>
                        <a href="javascript:foto(m4)"><img src="thumbs/bild-4.jpg" name="thumb" alt="" title="" width="200" height="150" /></a>
                    </li>
                </ul>
                <a href="javascript:scrollThumbs(m--)" class="pfeil-li">
                <img src="img/pfeil-li.gif" alt="Vorschaubilder zur&uuml;ckscrollen" title="" width="100" height="45" />
                </a>
                <a href="javascript:scrollThumbs(m++)" class="pfeil-re">
                <img src="img/pfeil-re.gif" alt="Vorschaubilder weiterscrollen" title="" width="100" height="45" />
                </a>
</body>
</html>
Da ich es lernen möchte, bitte ich um Tipps und Anregungen, wo meine Denkfehler sind, sowie natürlich um Tipps, wie ich es besser machen kann.

Außerdem möchte ich zum Schluss das Script in eine externe Datei auslagern.

Der Bereich, der nur ausgeführt werden kann, wenn der Browser JavaScript unterstützt, soll in einen Script-Tag, um mittels <noscript> eine alternative Galerie einbinden zu können. Auch hierzu hätte ich gerne einen Tipp.

Vielen Dank schon mal!

Grüße
Bernhard

Edit: P.S.: was mache ich beim Schreiben meines Beitrages falsch, dass der HTML-Code so unübersichtlich in einer Zeile dargestellt wird?
 
Zuletzt bearbeitet:
Werbung:
Werbung:
Erstmal solltest du das so gestalten:
Code:
<ul>
    <li>
        <a href="img/bild1.jpg"><img src="thumbs/bild-1.jpg" alt="" title="" width="200" height="150" /></a>
    </li>
    <li>
        <a href="img/bild2.jpg"><img src="thumbs/bild-2.jpg" alt="" title="" width="200" height="150" /></a>
    </li>
    <li>
        <a href="img/bild3.jpg"><img src="thumbs/bild-3.jpg" alt="" title="" width="200" height="150" /></a>
    </li>
    <li>
        <a href="img/bild4.jpg"><img src="thumbs/bild-4.jpg" alt="" title="" width="200" height="150" /></a>
    </li>
</ul>
Diese Liste dann auslesen, dann hast du problemlos die Daten zur Verfügung und es bleibt zugänglich. Auf die Liste setzt du overflow: scroll; und packst alle Thumbnails rein, die du hast. Dann musst du nur noch deine Funktion so umbauen, dass er sich merkt, welches Bild angewählt wurde und dieses dann entsprechend immer das Bild ändern. name="" ist geschichte, nimm gleich getElementById().

Das mit der XML-Deklaration würde ich mir nochmal überlegen.
 
Erstmal solltest du das so gestalten:
Code:
<ul>
    <li>
        <a href="img/bild1.jpg"><img src="thumbs/bild-1.jpg" alt="" title="" width="200" height="150" /></a>
    </li>
    <li>
        <a href="img/bild2.jpg"><img src="thumbs/bild-2.jpg" alt="" title="" width="200" height="150" /></a>
    </li>
    <li>
        <a href="img/bild3.jpg"><img src="thumbs/bild-3.jpg" alt="" title="" width="200" height="150" /></a>
    </li>
    <li>
        <a href="img/bild4.jpg"><img src="thumbs/bild-4.jpg" alt="" title="" width="200" height="150" /></a>
    </li>
</ul>
Diese Liste dann auslesen, dann hast du problemlos die Daten zur Verfügung und es bleibt zugänglich. Auf die Liste setzt du overflow: scroll; und packst alle Thumbnails rein, die du hast. Dann musst du nur noch deine Funktion so umbauen, dass er sich merkt, welches Bild angewählt wurde und dieses dann entsprechend immer das Bild ändern. name="" ist geschichte, nimm gleich getElementById().

Das mit der XML-Deklaration würde ich mir nochmal überlegen.

Hallo Crash,

danke Dir für Deine Antwort!

Dass die Liste nicht mehr so formatiert ist, wie sie soll, liegt daran, dass ich etwas zuviel rausgeschmissen habe, als ich die Datei vorbereitet habe, um sie ohne unnötigen Ballast zu veröffentlichen: natürlich soll jedes Bild ein Listenelement sein...

overflow:scroll will ich aus zwei Gründen nicht:
  • ich will keinen hässlichen Scrollbalken, der aussieht, als seien wir noch in der Zeit der Framesets...
  • ich will in einer Endlosschleife scrollen können, d.h. nach dem letzten Bild geht es nahtlos mit dem ersten weiter...
Aber vielleicht ist es tatsächlich sinnvoller, alle Thumbs in eine Liste zu packen, und mit display und position:absolute zu navigieren?

getElementById() schau ich mir morgen mal an - danke für den Tipp!

Welche Deklaration empfiehlst Du?

Grüße
Bernhard
 
Werbung:
overflow: scroll; Soll der Fallback sein, wenn JavaScript aus ist, damit ich dann trotzdem durch die Thumbnails navigieren kann. Die Pfeile erzeugst du im JavaScript und fügst sie dann in das Dokument ein.
 
ich will keinen hässlichen Scrollbalken, der aussieht, als seien wir noch in der Zeit der Framesets.
Was haben Scrollbalken mit Frames zu tun? Scrollbalken sind die einzige Methode, den Inhalt eines Containers zu erfassen, wenn der Inhalt größer ist, als der Container.
 
Der Doctype ist schon ok. Nur nimm deine erste Zeile weg. Sie kann Probleme verursachen (der liebe IE ;)) und ist nicht nötig.

Oh, ich dachte, dann motzt der Validator... - muss ich mich auch nochmal mit auseinandersetzen...
Aber jetzt erstmal JavaScript

overflow: scroll; Soll der Fallback sein, wenn JavaScript aus ist, damit ich dann trotzdem durch die Thumbnails navigieren kann. Die Pfeile erzeugst du im JavaScript und fügst sie dann in das Dokument ein.

Die Idee klingt gut (zumal man die Liste ja z.B. dann auch zweizeilig formatieren kann, wenn es nicht zu viele Thumbnails sind).
Da kommen aber schon die nächsten Anfängerfragen:
  • die Thumbnails haben dann ja zwei Links, einen HTML-Link und einen JavaScript-Link, mach ich die dann über <script> und <noscript>?
  • wie binde ich die dadurch notwendigen zwei verschiedenen CSS-Dateien ein? - Da denke ich vor allem an den IE, der ja öfter so eingestellt ist, dass er JavaScript erstmal blockt und eine Warnung von wegen "aktiver Inhalte" ausgibt und dann erst nach dem Zulassen die CSS nachladen müsste, die zumr Anzeige der JavaScript-Version benötigt wird
Was haben Scrollbalken mit Frames zu tun? Scrollbalken sind die einzige Methode, den Inhalt eines Containers zu erfassen, wenn der Inhalt größer ist, als der Container.

Ich weiß nicht, ob es nur mir so geht: jedesmal, wenn ich mitten auf einer Seite Scrollbalken sehe, ist mein erster Gedanke, "Oh Gott, Frames!"

Daher mag ich Scrollbalken mitten auf der Seite nicht. Aber in diesem Fall kann man drüber nachdenken, zumal sie ja eh nur für die wenigen Besucher zu sehen sind, die JavaScript deaktiviert haben...

Jetzt aber erstmal weiter mit JavaScript und meiner Bildergalerie...

ich hatte mein Array so gemacht:
Code:
<script language="javascript">
var num = 8; // Anzahl der Bilder
function foto(i) {
    if (document.images) {
    img = new Array();
    img[i]=new Image();
    img[i].src="img/bild-"+i+".jpg";
    document.images.bild.src=img[i].src;
    }
}
finde jetzt aber beim Wühlen im Netz z.B.:
Code:
[COLOR=#000000][COLOR=#007700]var [/COLOR][COLOR=#0000bb]img[/COLOR][COLOR=#007700]=[/COLOR][COLOR=#0000bb]new Array[/COLOR][COLOR=#007700]();
[/COLOR][/COLOR][COLOR=#000000][COLOR=#0000bb]img[/COLOR][/COLOR][COLOR=#000000][COLOR=#007700][]=[/COLOR][COLOR=#dd0000]"not in Use"[/COLOR][COLOR=#007700];
[/COLOR][/COLOR][COLOR=#000000][COLOR=#0000bb]img[/COLOR][/COLOR][COLOR=#000000][COLOR=#007700][]=[/COLOR][COLOR=#dd0000]"[/COLOR][/COLOR][COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR][COLOR=#000000][COLOR=#dd0000]/bild-1.jpg"[/COLOR][COLOR=#007700];
[/COLOR][/COLOR][COLOR=#000000][COLOR=#0000bb]img[/COLOR][/COLOR][COLOR=#000000][COLOR=#007700][]=[/COLOR][COLOR=#dd0000]"[/COLOR][/COLOR][COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR][COLOR=#000000][COLOR=#dd0000]/bild-2.jpg"[/COLOR][COLOR=#007700];
[/COLOR][/COLOR][COLOR=#000000][COLOR=#0000bb]img[/COLOR][/COLOR][COLOR=#000000][COLOR=#007700][]=[/COLOR][COLOR=#dd0000]"img/bild-3.jpg"[/COLOR][COLOR=#007700];[/COLOR][/COLOR][COLOR=#000000][COLOR=#0000bb]
img[/COLOR][/COLOR][COLOR=#000000][COLOR=#007700][]=[/COLOR][COLOR=#dd0000]"img/bild-4.jpg"[/COLOR][COLOR=#007700];[/COLOR][/COLOR]
oder auch:
Code:
[COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR]= new Array();
            [COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR][01] = new Image();
            [COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR][01].src = "[COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR][COLOR=#000000][COLOR=#dd0000]/bild-1.jpg[/COLOR][/COLOR]";
            [COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR][02] = new Image();
            [COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR][02].src = "[COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR][COLOR=#000000][COLOR=#dd0000]/bild-2.jpg[/COLOR][/COLOR]";
            [COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR][03] = new Image();
            [COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR][03].src = "[COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR][COLOR=#000000][COLOR=#dd0000]/bild-3.jpg[/COLOR][/COLOR]";
            [COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR][04] = new Image();
            [COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR][04].src = "[COLOR=#000000][COLOR=#dd0000]img[/COLOR][/COLOR][COLOR=#000000][COLOR=#dd0000]/bild-4.jpg[/COLOR][/COLOR]";
  • welcher Weg ist der bessere?
  • was bewirkt "not in Use"?
Grüße
Bernhard
 
Werbung:
Hallo @ alle,

zuerst nochmal zur XML-Deklaration: ohne diese bekommt man den IE nicht in den Standart-konformen Modus, daher sollte die doch angegeben sein?

Ansonsten bin ich am verzweifeln: ich hab mir ein Buch gekauft und gegoogelt - und komme keinen Schritt weiter...

Könnt Ihr mir ein Tutorial empfehlen, in dem getElementById() so erklärt ist, dass es auch ein Anfänger kapiert?


Grüße
Bernhard
 
Werbung:
Hallo crash,
und hallo @ alle,

ein kleinwenig bin ich weitergekommen:
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
<link href="includes/style.css" rel="stylesheet" type="text/css" />
<link href="includes/galerie.css" rel="stylesheet" type="text/css" />
<script src="includes/galerie.js" type="text/javascript"></script>
<meta http-equiv="content-style-type" content="text/css" />
<meta name="language" content="de" />
<meta http-equiv="imagetoolbar" content="no" />
</head>

<body>
    <div id="galeriebild">
    <img src="img/bild-1.jpg" id="bildgross" alt="" title="" width="400" height="300" />
    </div>
    <a href="javascript:bild(n--)" class="pfeil-li">
    <img src="img/pfeil-li.gif" alt="vorheriges Bild" title="" width="100" height="45" />
    </a>
    <a href="javascript:bild(n++)" class="pfeil-re">
    <img src="img/pfeil-re.gif" alt="n&auml;chstes Bild" title="" width="100" height="45" />
    </a>
    <noscript>
    <iframe src="img/bild-1.jpg" marginwidth="0" marginheight="0" id="bildergalerie" name="bildergalerie" frameborder="0" scrolling="no">
        <img src="img/bild-1.jpg" alt="" title="" width="400" height="300" />
    </iframe>
    </noscript>
    <div class="thumbs">
        <ul>
            <li id="thumb-1">
                <a onclick="bild(this);return false;" href="img/bild-1.jpg" target="bildergalerie"><img src="thumbs/bild-1.jpg" alt="" title="" width="200" height="150" /></a>
            </li>
            <li id="thumb-2">
                <a onclick="bild(this);return false;" href="img/bild-2.jpg" target="bildergalerie"><img src="thumbs/bild-2.jpg" alt="" title="" width="200" height="150" /></a>
            </li>
            <li id="thumb-3">
                <a onclick="bild(this);return false;" href="img/bild-3.jpg" target="bildergalerie"><img src="thumbs/bild-3.jpg" alt="" title="" width="200" height="150" /></a>
            </li>
            <li id="thumb-4">
                <a onclick="bild(this);return false;" href="img/bild-4.jpg" target="bildergalerie"><img src="thumbs/bild-4.jpg" alt="" title="" width="200" height="150" /></a>
            </li>
            <li id="thumb-5">
                <a onclick="bild(this);return false;" href="img/bild-5.jpg" target="bildergalerie"><img src="thumbs/bild-5.jpg" alt="" title="" width="200" height="150" /></a>
            </li>
            <li id="thumb-6">
                <a onclick="bild(this);return false;" href="img/bild-6.jpg" target="bildergalerie"><img src="thumbs/bild-6.jpg" alt="" title="" width="200" height="150" /></a>
            </li>
            <li id="thumb-7">
                <a onclick="bild(this);return false;" href="img/bild-7.jpg" target="bildergalerie"><img src="thumbs/bild-7.jpg" alt="" title="" width="200" height="150" /></a>
            </li>
            <li id="thumb-8">
                <a onclick="bild(this);return false;" href="img/bild-8.jpg" target="bildergalerie"><img src="thumbs/bild-8.jpg" alt="" title="" width="200" height="150" /></a>
            </li>
        </ul>
    </div>
    <a href="javascript:scrollThumbs(m--)" class="pfeil-li">
    <img src="img/pfeil-li.gif" alt="Vorschaubilder zur&uuml;ckscrollen" title="" width="100" height="45" />
    </a>
    <a href="javascript:scrollThumbs(m++)" class="pfeil-re">
    <img src="img/pfeil-re.gif" alt="Vorschaubilder weiterscrollen" title="" width="100" height="45" />
    </a>
</body>
</html>
das JavaScript habe ich nach galerie.js ausgelagert:
Code:
var num = 8 // Anzahl der Bilder
function bild(i)
{
    if (document.images)
    {
    img = new Array();
    if (i > num) i = 1;
    if (i < 1) i = num;
    img[i]=new Image();
    img[i].src="img/bild-"+i+".jpg";
    document.getElementById('bildgross').src=img[i].src;
    }
}
function bild(n)
{
    if (n > num) n = 1;
    if (n < 1) n = num;
    if (n++) bildnummer = bildnummer++;
    if (n--) bildnummer = bildnummer--;
    document.getElementById('bildgross').src = bildnummer.href;
}
function bild(bildnummer)
{
    document.getElementById('bildgross').src = bildnummer.href;
}
Allerdings ist das einzige, was funktioniert, der Bildwechsel beim Anklicken der Thumbnails...:-(
Beim Versuch, mittels Anklicken der Pfeile das nächste Bild aufzurufen kommt eine Fehlermeldung.
Wie ich das Scrollen der Thumbnailliste realisiere, weiß ich bislang nur im Ansatz: ich muss es irgendwie schaffen, einzelnen Listenelementen ein display:none; zu geben und die, die ich benötige, absolute positionieren (nur so dürfte es möglich sein, am Ende der Liste einen nahtlosen Übergang zum Anfang zu schaffen?).

Erfolglos war auch der Versuch, das <div id="galeriebild"> und die Pfeile in ein <script>-Tag zu setzen, um es bei deaktiviertem JavaScript nicht anzuzeigen.

Ich würde mich über weitere Tipps freuen!

Grüße
Bernhard

Edit: da es nicht erwünscht ist, Beiträge per erneutem Posting zu pushen, hoffe ich, dass das hier noch jemand liest...

Da ich es nicht schaffe, die Galerie so zu erstellen, wie ich mir das vorstelle, bitte ich um Angebote für eine derartige Galerie, bzw. um Angebote von jemandem, der bereit ist, mir JavaScript beizubringen.

Vielen Dank im Voraus!

Euch Allen Alles Gute für 2009!

Verzweifelte Grüße
Bernhard
 
Zuletzt bearbeitet:
Werbung:
Hallo @ alle,

erstmal entschuldige ich mich für den Doppelpost, aber anders habe ich wohl
keine Chance mehr, dass es noch gelesen wird.

Ich komme keinen Schritt vorwärts.
  • habe zwei Leute angeschrieben, die in der Jobbörse Aufträge suchen
    => keine Antwort bekommen
    => d.h. es bleibt mir gar nichts anderes übrig, als es irgendwie zu schaffen
  • habe mir noch ein Buch gekauft => ich kapier's einfach nicht
  • habe unzählige Tutorials gelesen => s.o.
Ich kann mir einfach nicht vorstellen, dass es so schwierig sein soll?

Hab den aktuellen Stand mal hochgeladen: http://www.virtual.bplaced.net/
(sowohl Bilder als auch CSS sind natürlich nur vorläufig)

Kann mir bitte jemand den entscheidenden Tipp geben?

Verzweifelte Grüße
Bernhard
____________________________________________________________

Edit:
ein kleines Stück bin ich weitergekommen:
  • wenn ich die Zeile <iframe src="img/bild-1.jpg"... auskommentiere,
    funktioniert das Blättern des großen Bildes im Firefox
  • wenn ich diese Zeile nicht auskommentiere funktioniert es im IE
  • allerdings funktioniert es nicht endlos
  • dagegen funktioniert der Bildwechsel im IE nur bei auskommentiertem iframe,
    im FF nur, wenn er nicht auskommentiert ist
  • beim Bildwechsel wird das falsche Bild audgerufen, wenn die Thumbs
    nicht in ihrer Ausgangsposition sind
  • das Blättern der Thumbnails funktioniert ebenfalls nicht endlos
  • und (ganz komisch!?) das Blättern funktioniert erst beim zweiten Klick
  • warum zählt das Script bei Änderung der Blätter-Richtung erstmal noch eins
    in der vorhergehenden Richtung?
Den iframe verwende ich, weil ich sonst bei deaktiviertem JavaScript keine
Idee habe, wie ich das dann nutzlose Image-Objekt wegbekommen kann.

ich bitte um Hilfe!

Ratlose Grüße
Bernhard
 
Zuletzt bearbeitet:
Hi Bernhard,

Sorry - zu spät für mich, um es ausführlich zu erklären. Kannst ja mal gucken, ob das bei Dir funktioniert: http://html-hilfe.julius-rapp.de/js-galerie/

evtl. To-Do-Liste
  • Thumbnails bei Übertrag ordnen (absolute Positionierung, 4 Klassen, Unterscheidung in der if-Abfrage, wo bisher die ganzen || stehen)
  • Wenn die Seite geladen ist, die großen Bilder schonmal vorladen lassen
  • Einen Javascript-Könner fragen, ob man das alles so machen darf
  • Links bei deaktiviertem Javascript nicht nur verstecken, sondern ganz aus dem HTML-Quelltext nehmen und mit Javascript erst erstellen
Gruß
Junny
 
Hallo Junny,

danke! Das ist ja wie Weihnachten!

Hi Bernhard,

Sorry - zu spät für mich, um es ausführlich zu erklären. Kannst ja mal gucken, ob das bei Dir funktioniert: http://html-hilfe.julius-rapp.de/js-galerie/

evtl. To-Do-Liste
  • Thumbnails bei Übertrag ordnen (absolute Positionierung, 4 Klassen, Unterscheidung in der if-Abfrage, wo bisher die ganzen || stehen)
  • Wenn die Seite geladen ist, die großen Bilder schonmal vorladen lassen
  • Einen Javascript-Könner fragen, ob man das alles so machen darf
  • Links bei deaktiviertem Javascript nicht nur verstecken, sondern ganz aus dem HTML-Quelltext nehmen und mit Javascript erst erstellen
Gruß
Junny

Hab's erstmal nur im Firefox ausprobiert und da funktioniert es!
Mein erstes To-Do ist, dass ich mir in aller Ruhe anschauen werde, wie
Du das gemacht hast...
Ich fürchte, dass dabei schon jede Menge Fragen auftauchen werden.
Anschließend kommen die Punkte, die du schon aufgezählt hast:
  • Thumbnails ordnen
    • klar, ganz wichtig, zumal ich nicht vorhabe, Bildnummern
      anzuzeigen, und so die Verwirrung vorprogrammiert wäre
    • bin gespannt, ob ich das hinbekomme
  • Bilder vorladen
    • da wäre es mir das liebste, ich würde einen Weg finden,
      jeweils nur die vorzuladen, die mit dem nächsten Klick
      erreichbar sind, meinst Du, das ist mit vernünftigem
      Aufwand realisierbar? (die Galerie wird mal deutlich mehr als
      acht Bilder umfassen und soll in eine Site, bei der vermutlich
      relativ viele Besucher weder DSL noch Flatrate haben)
  • "Einen Javascript-Könner fragen, ob man das alles so machen darf" :-)
    • ich halte Dich für einen Könner!
  • die Version "bei deaktiviertem JavaScript" möchte ich so perfekt wie
    irgendmöglich hinbekommen
    • da werden auch nochmal Fragen auftauchen...
  • zum Schluss muss das ganze in ein relativ aufwendiges Layout (die
    Galerie wird erst relativ weit unten auf der Seite sein, daher kam
    keine Lösung in Frage, bei der die Seite jedesmal neu geladen wird)
Auf jeden Fall danke ich Dir vielmals!

Viele Grüße
Bernhard
 
Werbung:
  • Thumbnails ordnen
    • klar, ganz wichtig, zumal ich nicht vorhabe, Bildnummern
      anzuzeigen, und so die Verwirrung vorprogrammiert wäre
    • bin gespannt, ob ich das hinbekomme
Wenn Du eine feste Anzahl von vier Bildern vorsiehst, erstelle doch einfach vier Klassen. Die Bilder lässt Du absolut positionieren und an dieser Stelle vergibst Du die Klassen, indem Du die if-Kontrolle aufsplittest:
Code:
if(j == bildNummer(m)-1 || j == bildNummer(m+1)-1 || j == bildNummer(m+2)-1 || j == bildNummer(m+3)-1)
|| bedeutet oder.
  • Bilder vorladen
    • da wäre es mir das liebste, ich würde einen Weg finden,
      jeweils nur die vorzuladen, die mit dem nächsten Klick
      erreichbar sind, meinst Du, das ist mit vernünftigem
      Aufwand realisierbar? (die Galerie wird mal deutlich mehr als
      acht Bilder umfassen und soll in eine Site, bei der vermutlich
      relativ viele Besucher weder DSL noch Flatrate haben)
Ja, die kleinen Bilder werden ja sowieso alle zu Beginn geladen. Wenn dann scrollThumbs aufgerufen wird und die aktuellen Vorschaubilder sichtbar macht, einfach das dazugehörige große Bild vorladen.
  • "Einen Javascript-Könner fragen, ob man das alles so machen darf" :-)
    • ich halte Dich für einen Könner!
Ich hab Dir da nur was zusammengebastelt, was funktioniert, da ich leider nie in den Genuss einer guten theoretischen Schulung gekommen bin und auch nie genügend Elan hatte, um es mir selbst anzueignen.
  • die Version "bei deaktiviertem JavaScript" möchte ich so perfekt wie
    irgendmöglich hinbekommen
Mir persönlich sind ja Bildergalerien am liebsten, in denen die Vorschaubilder alle aufgelistet sind (immer so viele, wie beim Nutzer in die Zeile passen) und man einfach nur draufklicken muss, um direkt (evtl. in neuem Fenster) zum Bild zu kommen.
  • zum Schluss muss das ganze in ein relativ aufwendiges Layout (die
    Galerie wird erst relativ weit unten auf der Seite sein, daher kam
    keine Lösung in Frage, bei der die Seite jedesmal neu geladen wird)
Ich nehme an, dass Dein Layout auch der Grund für diese andere Lösung ist.

Gruß
Junny
 
Hallo Junny,

je länger ich mich damit beschäftige, desto mehr wird mir bewusst, wieviel
Arbeit Du Dir da gemacht hast!

Wenn Du eine feste Anzahl von vier Bildern vorsiehst, erstelle doch einfach vier Klassen. Die Bilder lässt Du absolut positionieren und an dieser Stelle vergibst Du die Klassen, indem Du die if-Kontrolle aufsplittest:
Code:
if(j == bildNummer(m)-1 || j == bildNummer(m+1)-1 || j == bildNummer(m+2)-1 || j == bildNummer(m+3)-1)
|| bedeutet oder.
|| wusste ich sogar... - musste aber trotzdem eine ganze Weile nachdenken,
was du mit der Variablen j machst...
Mein Ansatz:
  • ich müsste doch hier die Variable m abfragen?
  • ist diese = num+1, bekommt Thumb 1 eine absolute Position mit left:3×Breite der Thumbs
  • ist sie = num+2, bekommen Thumb 1 und 2 eine absolute Position,
    Thumb 1 mit 2×Breite, Thumb 2 mit 3×Breite (da hab ich jetzt die Abstände
    zwischen den Thumbs noch nicht berücksichtigt, das schaffe ich dann schon...)
Damit müsste sich die Galerie dann auch relativ einfach an eine unterschiedliche
Zahl Thumbnails anpassen lassen
Ja, die kleinen Bilder werden ja sowieso alle zu Beginn geladen. Wenn dann scrollThumbs aufgerufen wird und die aktuellen Vorschaubilder sichtbar macht, einfach das dazugehörige große Bild vorladen.
Ich denke, ich lade sie jetzt erstmal alle vor, da ich das wohl auf Anhieb schaffen
werde. Um Verbesserungen kann ich mich immer noch bemühen, wenn alle
Probleme gelöst sind...
Ich hab Dir da nur was zusammengebastelt, was funktioniert, da ich leider nie in den Genuss einer guten theoretischen Schulung gekommen bin und auch nie genügend Elan hatte, um es mir selbst anzueignen.
Ich hab zwar eine abgeschlossene Ausbildung zum Mediengestalter operating-nonprint,
aber JavaScript stand nicht auf dem Ausbildungsplan.
O-Ton der Ausbilder, "das erzeugen Programme wie Dreamweaver ja eh automatisch",
dafür haben wir viele Plakate und Flyer etc. gestaltet...:-(
Mir persönlich sind ja Bildergalerien am liebsten, in denen die Vorschaubilder alle aufgelistet sind (immer so viele, wie beim Nutzer in die Zeile passen) und man einfach nur draufklicken muss, um direkt (evtl. in neuem Fenster) zum Bild zu kommen.
Ich mag es überhaupt nicht, wenn Bilder in einem neuen Fenster aufgehen,
das ich dann extra wieder schließen muss.
Auch die Lightbox mag ich nicht, sieht zwar gut aus, mir ist es aber schon
mehrfach passiert, dass ich intuitiv das Fenster geschlossen habe, als ich
eigentlich nur das Bild schließen wollte...
Ich nehme an, dass Dein Layout auch der Grund für diese andere Lösung ist.

Gruß
Junny
Es gibt mehrere Gründe für diese Lösung:
  • ich wollte mal was neues, nachdem ich's bislang immer mit einem iframe
    gemacht habe, darunter oder daneben die Thumbs angeordnet
  • die iframe-Methode ist für kleine Viewports und viele große Bilder nur
    bedingt geeignet
  • das ganze soll (später mal) mit PHP kombiniert werden, so dass es genügt,
    die Bilder in die beiden Ordner zu schmeißen, PHP liest die Anzahl der Bilder
    aus, ändert die Variablen und die Breite der Thumbsliste, ohne, dass ich mir
    Sorgen um eventuelle Veränderungen im Layout machen muss (spätestens
    hier wäre meine iframe-Lösung am Ende, da bei z.B. 100 Thumbnails auch
    der Besucher mit einem sehr großen Viewport bei jedem Bildwechsel scrollen
    müsste)
Viele Grüße
Bernhard

Edit:
evtl. To-Do-Liste
  • Links bei deaktiviertem Javascript nicht nur verstecken, sondern ganz aus dem HTML-Quelltext nehmen und mit Javascript erst erstellen
Das müsste mit createElement() zu bewerkstelligen sein?
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben