Beiträge von Sempervivum

    Auch das verstehe ich nicht richtig, ohne das Umfeld zu sehen. Der Parameter value ist der Wert, der aktuell angezeigt werden soll. max ist der Maximalwert, der auftreten kann. Der Maximalwert wird beim Start nur temporär eingesetzt, um die Größe berechnen zu können, sofort anschließend wird er durch value ersetzt:

    Ich würde ja eher eine Galerie empfehlen, die durch Klick bedient wird, damit sie auch auf Touch-Geräten funktioniert. Diese habe ich früher mal gemacht:

    Edit: Ich sehe, dass die Galerie von Gipspferd das auch realisiert, mit :focus. Nehme alles zurück.

    Der Fehler liegt beim Aufruf:

    Code
    erstelleBalken(balkenId3, 0, 0, { colorBar: 'black', templateText: "{remaining}\'", textPos: "left" });

    Der dritte Parameter ist der Maximalwert und darf nicht Null sein. Das Skript setzt zunächst den Maximalwert in den Text ein um den maximal benötigten Platz zu messen. Übergibst Du 0, wird der Platz für "0'" berechnet. Nimmt der Wert im weiteren Verlauf größere Werte an, reicht der Platz nicht aus.

    Der Grund ist, dass dieses:

    Code
    circle.onclick=add

    den Listener überschreibt, während addEventListener(), wie der Name sagt, hinzu fügt.

    In jedem Fall ist es IMO sauberer und klarer, wenn man ihn nur einmal bei Laden der Seite hinzu fügt, denn das Kreiselement bleibt ja unverändert im Spielverlauf.

    Versuch macht kluch - ich habe es getestet und Du hast Recht: Definiert man die Funktion add() außerhalb, funktioniert es richtig. Das hatte ich zunächst nicht erwartet, sondern dass die Funktion mehrfach registriert wird, egal ob sie innerhalb oder außerhalb von startGame() liegt. Offenbar ist es jedoch so, dass die selbe Funktion nicht mehrfach registriert wird, auch wenn addEventListener() mehrfach aufgerufen wird.

    Stimmt, aber das ist nicht der einzige Fehler:

    Code
    allBirds = document.getElementById(".bird-gallery"),
    listOfBirds = document.querySelector("bird-list").innerHTML;

    getElementById erwartet eine ID als Parameter. Hier kannst Du am sinnvollsten document.querySelector verwenden.

    document.querySelector erwartet dagegen einen CSS-Selektor, d. h. Du musst ein # voran stellen.

    Dies funktioniert:

    Code
    allBirds = document.querySelector(".bird-gallery"),
    listOfBirds = document.querySelector("#bird-list").innerHTML;

    Mit

    Code
    listOfBirds = document.querySelector("bird-list");

    bekommst Du nur das DOM-Element, nicht den Text darin . So funktioniert es:

    Code
    <script type="text/template" id="bird-list">
            [{ "id":1, "name":"Haussperling", "latinName":"Passer domesticus", "imagePath":"resources/images/haussperling.png", "audioPath":"resources/data/audio/haussperling.ogg" },{ "id":2, "name":"Kohlmeise", "latinName":"Parus major", "imagePath":"resources/images/kohlmeise.png", "audioPath":"resources/data/audio/kohlmeise.ogg" },{ "id":3, "name":"Star", "latinName":"Sturnus vulgaris", "imagePath":"resources/images/star.png", "audioPath":"resources/data/audio/star.ogg" },{ "id":4, "name":"Amsel", "latinName":"Turdus merula", "imagePath":"resources/images/amsel.png", "audioPath":"resources/data/audio/amsel.ogg" }]
        </script>
        <script>
            listOfBirds = document.getElementById("bird-list").innerText;
            var obj = JSON.parse(listOfBirds);
            console.log(obj);
        </script>

    Allerdings ist das ganze unnötig kompliziert. Dieses funktioniert genau so gut:

    Code
    <script>
            var listOfBirds = [{ "id": 1, "name": "Haussperling", "latinName": "Passer domesticus", "imagePath": "resources/images/haussperling.png", "audioPath": "resources/data/audio/haussperling.ogg" }, { "id": 2, "name": "Kohlmeise", "latinName": "Parus major", "imagePath": "resources/images/kohlmeise.png", "audioPath": "resources/data/audio/kohlmeise.ogg" }, { "id": 3, "name": "Star", "latinName": "Sturnus vulgaris", "imagePath": "resources/images/star.png", "audioPath": "resources/data/audio/star.ogg" }, { "id": 4, "name": "Amsel", "latinName": "Turdus merula", "imagePath": "resources/images/amsel.png", "audioPath": "resources/data/audio/amsel.ogg" }];
        </script>
        <script>
            console.log(listOfBirds);
        </script>