Bilder in einer Schleife laden

  • Hallo,


    in der Gebärdensprache werden manchmal Wörter buchstabiert. In der Anwendung sollen Wörter buchstabiert werden, die einzelnen Buchstaben nacheinander an der gleichen Stelle angezeigt werden.


    Mein Ergebnis mit unten stehendem Code ist gaoa. Eigentlich solle es gong sein.


    Im Array sind noch nicht alle Buchstaben, auch mache ich ihn noch zweidimensional, die Switch Anweisung ist nur zum schnellen testen. Später lese ich die Wörter aus einer Datei, es kann sich mehrfach angesehen werden und Funktionen wie Geschwindigkeit, Lösung anzeigen und weiter kommen dazu.


    Aber erstmal müssten meine Worte richtig dargestellt werden. Kann mir jemand helfen, wo ich was übersehen ? Schönen Dank !


  • Das Problem liegt offenbar hier:

    Code
    <img src="FA/Hello.png" onload="play('bild1');" id="bild1" />

    Dieses onload feuert nicht nur, wenn die Seite zum ersten Mal geladen wird, sondern auch jedesmal, wenn Du das src-Attribute änderst, um ein neues Bild anzuzeigen, denn dabei wird dieses Bild jeweils geladen.


    Durch die vielen Mini-Funktionen ist der Code schwer zu lesen, ich empfehle, es zu straffen.


    Außerdem empfehle ich, die Bildadressen in einem Objekt abzulegen:

    Code
    var bilder = {};
    bilder.a = "FA/FA_A.png";
    bilder.b = "FA/FA_B.png";
    bilder.c = "FA/FA_C.png";
    bilder.d = "FA/FA_D.png";
    // usw.

    Dann kann der ganze Switch entfallen und es reduziert sich auf:

    Code
    document.getElementById(a).src = bilder[a];
  • Hallo,


    vielen Dank dafür.


    Läuft. Mit verschiedenen Geschwindigkeiten usw. Jetzt muss ich nur meine Textdatei mit den Wörtern in einen Array bekommen, um ein zufälliges Wort auszuwählen. Hab versucht mit json_encode einen php Array zu übergeben, oder Variable Wort = <? echo $Woerter[$Zufall]; ?>;


    Ging leider beides nicht. Vielleicht noch nen Tip für mich ?


    Schönen Dank !

  • Zitat

    Jetzt muss ich nur meine Textdatei mit den Wörtern in einen Array bekommen

    Würde ich automatisch mit einem PHP-Skript machen. Poste die Struktur der Textdatei, dann kann man dir die wenigen Zeile Code geben.

    Zitat

    Hab versucht mit json_encode einen php Array zu übergeben.

    Das ist sicher der richtige Ansatz. Hast Du es so versucht?:

    PHP
    var woerter = <?php echo json_encode($woerter); ?>;
  • Ich lade die Textdatei per php. In der Datei sind alle Wörter untereinander.

    Code
    $file = fopen("gesamt.txt", "r");
    $members = array();
    while (!feof($file)) {
        $members[] = fgets($file);
    }
    fclose($file);


    So kann ich drauf zugreifen, jedoch bekomm ich immer die gleiche Zufallszahl.

    PHP
    <?php $Zuf = rand(0, 600);?>
    Wort = <?php echo json_encode($members[$Zuf]); ?>;


    und seitdem - nicht lachen - versuch ich so ne Variante

    PHP
    var min = 0;
    var max = 600;
    var x = Math.floor(Math.random() * (max - min + 1)) + min;
    Wort = <?php echo json_encode($members[ ?> + x + <?php ]); ?>;
  • Wenn die Wörter untereinander, durch Zeilenumbruch getrennt, stehen, kann man sie viel einfacher mit der Funktion file() in ein Array einlesen.

    Für den oberen Grenzwert bei Aufruf von rand() besser die Anzahl der Wörter durch count() ermitteln.

    Wenn Du im PHP nur ein einziges Wort ausgibst, brauchst Du dieses nicht mit jcon_encode() zu kodieren.

    Dieses funktioniert bei mir:

    PHP
        <?php
        $woerter = file('gesamt.txt', FILE_IGNORE_NEW_LINES);
        $idx = rand(0, count($woerter) - 1);
        ?>
        <script>
            var zufallswort = "<?php echo $woerter[$idx]; ?>";
            console.log(zufallswort);
        </script>
  • Hmm. Hier unter Quiz Fingeralphabet sieht man wie ich es meine. Jeweils bei Start kommt ein neues Wort. Is gefaked, da hab ich die Wörter in nem Array fest vercoded :) Bin ein Windowsprogrammierer, will es meinen Teilnehmenden nur leichter machen, dass sie auch mit dem Handy lernen können. Von daher bin ich echt dankbar für Deine Geduld !


    http://www.gebaerdensprache-online-lernen.de/Vok/main.php


    Mit Deinem letzten Code bekomm ich meist gar nix und wenn, dann eine Zahl angezeigt.

  • Ja, jetzt wo ich das sehe, verstehe ich, was Du vor hast. Da warst Du aber fleißig, ein Array mit 600 Wörtern! Oder ist das mit PHP generiert?

    Mein Code funktioniert bei mir einwandfrei. Ich hatte ihn zunächst nur mit Ziffern getestet und mit Wörtern funktionierte er nicht. Dann habe ich ihn korrigiert und in meinem Posting geändert. Hast Du vielleicht vorher die fehlerhafte Version genommen?

    Wenn Du bei jedem Druck auf Start ein neues Wort auswählen willst, wäre es natürlich besser, das ganze Array in JSON zu kodieren und von PHP an JS zu übergeben.

  • Hast recht, hatte den alten. Der veränderte geht.


    Nee, hab die Wörter lokal in ner Datenbank und mir die dann gleich als Quellcode ausgegeben. Wollt nur mal sehen, ob es generell klappt. Da ich noch mehr Videos drehe, erzeug ich aus meiner Anwendung die ganzen php Dateien zu Lektionen, den dazugehörigen Gebärden usw. Das ist mein zweiter Tag in php/javascript.


    Versteh ich das richtig - php läuft zuerst und wird nur beim Refresh neu ausgeführt. Daher kommt auch immer die gleiche Zufallszahl bzw. sie wird ja gar nicht neu ermittelt. Über JSON übergebe ich den ganzen php Array in einen JS Array, erzeuge meine Zufallszahl dort und kann zugreifen, da ich den ja die Laufzeit über zur Verfügung habe.


    Ich hatte was gefunden und probiert zu json_encode, den maskieren und weiß der Teufel was noch alles. Was Du geschrieben hattest

    PHP
    Wortliste = <?php echo json_encode($woerter); ?>;


    Ich hab Wortliste mal als var, dann als Array definiert. Aber bin zu blöd darauf zuzugreifen.


    Ich will auf ne Datenbank verzichten, den wie man merkt hab ich von php/js so viel Ahnung wie ne Kuh vom Klettern. Und die Gefahr mir da irgendwelche Injections einzufangen wollt ich umgehen. Hab gelesen js und ajax braucht man für ne DB. Und dann stocher ich in drei Sprachen rum. Ja nachdem, wieviele Videos es werden , steht das aber vielleicht doch mal an.

  • Der Ansatz ist schon richtig, sofern $woerter ein Array ist, wird auch Wortliste eines sein. Dann kannst Du ein zufälliges Wort wie folgt auswählen:

    PHP
            var woerter = <?php echo json_encode($woerter); ?>;
            console.log(woerter);
            var idx = Math.floor(Math.random() * woerter.length);
            var zufallswort = woerter[idx];
            console.log(zufallswort);
  • Ein letztes Mal nerv ich Dich. Ich krieg leider kein Ergebnis. Auch nicht in der eigentlichen Anwendung.


    PHP
    <?php
    $woerter = file('gesamt.txt', FILE_IGNORE_NEW_LINES);
    $idx = rand(0, count($woerter) - 1);
    ?>
        <script>
        var woerter = <?php echo json_encode($woerter); ?>;
        var idx = Math.floor(Math.random() * woerter.length);
        var zufallswort = woerter[idx];
        alert(zufallswort);
        </script>
  • Kann beim Lesen keinen Fehler entdecken. Bei meinen Tests war $woerter anfangs leer, weil ich die Datei gesamt.txt anfangs nicht UTF8-kodiert gespeichert hatte. Dann schlägt das Kodieren nach JSON fehl, wenn Umlaute oder ß vorhanden sind und das Array ist leer.

    Wenn Du es damit nicht beheben kannst, dann lade den Code hoch und poste die URL. Du kannst ja eine Kopie anlegen, damit das, was funktioniert, online bleibt.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!