Beiträge von Sempervivum

    Mit CSS-Animation kann man auch Hintergrundbilder wechseln und sogar schön überblenden:

    https://wiki.selfhtml.org/wiki/CSS/Eigenschaften/Animation

    Ich hatte da vor ein paar Tagen für eine andere Frage ein Demo gemacht:

    Welche Informationen ist unter dem Link beschrieben. Ich gebe zu, dass die Infos dort ein wenig verwirrend sind, weil es so viel ist. Ein wichtiges ist target, das gibt das Element an, das das Event auslöst, in deinem Fall den Button auf den geklickt wurde. Lass dir das Event mal mit console.log ausgeben und sieh dir an, was drin steht:

    Code
    1. closegarantie.addEventListener("click", function (e) {
    2. console.log(e);
    3. closegarantiebody.classList.toggle("d-none");
    4. });

    Das toggle ist schon richtig und zwar dort, wo Du den Text immer abwechselnd auf- und zumachen willst. Aber bei "Alle ausblenden" willst Du ja, dass sie unabhängig vom aktuellen Zustand unsichtbar werden, daher ist dort das add angebracht.


    Der Parameter e in deiner anonymen Funktion steht für event , das ist grob gesagt ein Objekt, das Informationen über das auslösende Ereignis enthält, in deinem Fall den Klick auf den Button. Ist hier im einzelnen beschrieben:

    https://wiki.selfhtml.org/wiki/JavaScript/DOM/Event

    Weglassen kannst Du es immer dann, wenn Du keine der Informationen darin benötigst.

    Alle die Variablen, die Du eingangs mit getElementById ermittelst, ändern sich im weiteren Verlauf nicht mehr und sollten als const definiert werden.


    Das Verfahren mit classList.toggle ist schon Mal gut.


    Besser nicht für jeden Unterpunkt eine eigene ID und Funktion definieren, sondern allen die selbe Klasse zuweisen, eine Nodelist mit querySelectorAll ermitteln, diese in einer Schleife abarbeiten und jeweils den Eventhandler zuweisen. Dazu musst Du im DOM navigieren und brauchst Nachbarselektoren:

    https://wiki.selfhtml.org/wiki/CSS/Selektoren/Kombinator

    Auf die Weise brauchst Du nur noch das HTML zu ändern, wenn eine weitere Frage hinzu kommt.


    Zitat

    wie fixe ich es wenn ich einzelne Elemente ausblende, dann aber auf den button alle ausblenden gehe dann blendet er nur die aus die eingeblendet sind

    Das kommt durch das classList.toggle zu Stande, verwende statt dessen classList.add.


    Zitat

    kann mir jemand noch erklären wie ich den Button von ausblenden zu einblenden ändern kann dieser sich aber wieder ändert wenn wieder drauf geklickt wird

    Lösung a): Im HTML zwei Buttons anlegen und den, der gerade nicht sichtbar ist, mit display:none; unsichtbar machen. Auch dazu kannst Du die Klasse "d-none" verwenden.

    Lösung b): Die Buttons nicht im HTML anlegen, sondern in einem Pseudoelement ::after. Auch das hat den Vorteil, dass Du nicht jedes Mal den Button berücksichtigen musst, wenn Du einen neue Frage hinzu fügst.

    Danke für das Sorbet! Ich lasse es Mal laufen, während ich dies schreibe.


    So wie auf dem Screenshot ist es richtig. Mehr zum Einbinden von JS und CSS kannst Du hier nachlesen:

    https://wiki.selfhtml.org/wiki…ls/DOM/Einbindung_in_HTML

    https://wiki.selfhtml.org/wiki…ieg/Stylesheets_einbinden


    Zitat

    Heißt das ich muss mich für eine der vielen Lightboxen entscheiden und diese dann in meinem javascript (js) Ordner einbinden, durch den eingesetzten <script> Code wird das vom Browser dann erkannt und es kann losgehen mit der Diashow?

    Ja.

    Zitat

    Diesen Quellcode

    Code

    1. <script src="ihr-js-verzeichnis/lightbox.js"></script>

    habe ich in der letzten Zeile bevor der </body> tag schließt eingefügt. Wahrscheinlich falsch, siehe hier:

    Offenbar hast Du das von hier:

    https://wiki.selfhtml.org/wiki…orials/Lightbox_einbinden

    I. allg. ist Selfhtml eine gute Quelle, aber in diesem Fall wird das Einbinden des js-Files nicht gut beschrieben. Du musst, genau wie beim CSS-File, die Datei lightbox.js in dein Verzeichnis für Javacripts kopieren, gängiger Name "js", und dann den Verzeichnisnamen im Skript-Tag angeben:

    <script src="js/lightbox.js"></script>


    <a href="images/bild-1.jpg" data-lightbox="bild-1" data-title="Bildunterschrift"> <img src="images/bild-1-vorschau.jpg" alt="alternative Erklärung"> </a>

    Zitat

    Nur wo soll ich den Quellcode einfügen?

    Dieser Code zeigt das Vorschaubild an und enthält den Link auf das große Bild, das in der Lightbox angezeigt werden soll. Die Position ist beliebig, platziere diesen Code dort, wo das Vorschaubild angezeigt werden soll.


    Lightboxes gibt es diverse, die Beschreibung bei Selfhtml bezieht sich auf die lhokeshdakar-Version. Ich empfehle statt dessen Fancybox 3, weil sie voll responsiv und Touch-geeignet ist. Wenn Du sie aus dem CDN lädst, wie im Quickstart angegeben, ist es ganz einfach.

    https://www.fancyapps.com/fancybox/3/

    Zitat

    Sollte nicht der <head> tag seperat an erster Stelle stehen und und wenn der </head> tag geschlossen ist, danach erst der <body> tag anfangen??

    Das trifft zu. Aber <head> nicht mit <header> verwechseln, beides sind verschiedene Dinge.


    Zitat

    die Website wird allerdings richtig angezigt..

    Das ist so, die Browser versuchen, auch aus fehlerhaftem Code eine vernünftige Anzeige zu machen.

    Ja, die Antwort ist immer die selbe aber dadurch nicht weniger richtig: Informiere dich über Flexlayout und die Eigenschaft align-items, damit kannst Du solch eine Andordnung leicht erzeugen.

    Zitat

    Wie kann ich alle Photos in der Bildergalerie so anordnen das jedes das gleiche Seitenverhältnis hat bzw in einen quadratischen Rahmen packen?

    Wenn Du die Bilder in einen quadratischen Rahmen packen willst, musst Du akzeptieren, dass

    • entweder seitlich oder oben und unten ein Leerraum entsteht
    • oder seitlich oder oben und unten etwas abgeschnitten wird.

    Realisieren kannst Du beides entweder mit Hintergrundbildern und der CSS-Eigenschaft background-size oder mit img-Tags und der CSS-Eigenschaft object-fit.

    https://wiki.selfhtml.org/wiki…d_-bilder/background-size

    https://wiki.selfhtml.org/wiki…ige/object-fit#object-fit


    Zitat

    einfache Galerie mit vier quadratischen Formaten auf jeder Zeile

    Ich empfehle, dich nicht auf eine feste Anzahl pro Zeile festzulegen, sondern diese variabel zu halten, denn es gibt vom Smartphone bis zum Desktop-PC sehr viele verschiedene Bildschirmabmessungen.


    Zitat

    Sollte ich die Bilder für die Vorschau in der Bildergalerie (...) mit Thumbnails bestücken das die ladezeit kürzer wird und erst die originalgröße der Photos beim klick auf das Vorschaubild in einer neuen Seite laden oder ist das egal?

    Egal ist es nicht, denn die Ladezeit ist ein wichtiger Faktor für deine Besucher. Sind es relativ viele Bilder, ist auf jeden Fall zu empfehlen, Thumbnails zu verwenden.


    Zitat

    Ist es überhaupt die richtige Herangehensweise die Photos über CSS Code in ein Raster zu packen und dann in einer neuen Seite zu verlinken in der das Photo dann mit der Originalgröße angezeigt wird?

    Ein Raster schon, aber auf eine neue Seite verlinken weniger, weil es für den Besucher umständlich ist, von der neuen Seite immer wieder zurück in die Übersicht zu müssen. Ein gängiges Verfahren für eine Bildergalerie ist, eine Lightbox zu verwenden, ich empfehle Fancybox 3:

    https://www.fancyapps.com/fancybox/3/

    Probiere es aus und mach dir ein Bild.

    Zitat

    Wozu ist "PicAmount" ?

    Das ist mir auch unklar.


    Ich bin der Meinung, dass dein Code mit der Schleife funktionieren sollte. Um Missverständnisse zu vermeiden, würde ich nur das "1" bei den Variablennamen weg lassen:

    Code
    1. var btn_i;
    2. for (btn_i = 1; btn_i < PicAmount; btn_i++){
    3. var modal = document.getElementById("myModal"+btn_i);
    4. var btn = document.getElementById("Pic"+btn_i);
    5. btn.onclick = function() {modal.style.display = "block";}
    6. }

    denn diese Variablen enthalten ja bei jedem Schleifendurchlauf einen anderen Button/Modal.

    Hast Du genau in den Einstellungen des Drucken-Dialoges nachgesehen?


    Wenn es nicht geht, können wir immer noch ein img-Tag mit object-fit verwenden.

    Code
    1. <tr height="25">
    2. <td align="center" class="anfahrt" rowspan="12">
    3. <div class="anfahrtsbild">
    4. <img src="routenmap.png">
    5. </div>
    6. </td>
    7. </tr>

    Wenn ich mir den String ansehe, kommt mir der Verdacht, dass es JSON-kodierte Daten sind. Wo kommt der String denn her? Du ersetzt Anführungszeichen, die in deinem Beispiel nicht zu sehen sind. Kann es sein, dass dein String so aussieht:

    Code
    1. {"Peter": 0.998, "Uwe": 0.872541254, "Beate": 0.72, "Maria Dana": 0.854745}

    Ich kenne das von meinem Browser, dass man das Drucken der Hintergrundbilder ausschalten kann um Tinte/Toner zu sparen. Sieh mal nach, ob Du das in deinem Browser auch findest. Wenn nicht, müssen wir statt des Hintergrundbildes ein img-Tag nehmen und object-fit.