◆ Portail Antalaha

Annuaire › Code ouvert

Quiz Antalaha et Madagascar

tutorial · Voir le site ↗
Connectez-vous pour copier ce site

Code publié par son auteur, en lecture seule. « Copier dans mon espace » crée un nouveau site à vous (non publié) que vous pouvez modifier librement.

index.html · 4.6 Ko

<!DOCTYPE html>
<!--
  ============================================================
  Fichier : index.html
  Rôle    : structure du quiz. Trois « écrans » (accueil, question,
            fin) dont un seul est visible à la fois (attribut hidden).
  Dépend de : css/style.css + 5 scripts, à charger DANS CET ORDRE
              (voir le bas de la page).
  ============================================================
-->
<html lang="fr">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Quiz Antalaha et Madagascar</title>
  <link rel="stylesheet" href="css/style.css">
</head>
<body>

  <header class="entete">
    <img class="entete__image" src="medias/antalaha-ravenala-paysage.svg" alt="">
    <div class="entete__texte">
      <h1>Quiz Antalaha et Madagascar</h1>
      <label class="option-son">
        <input type="checkbox" id="option-son" checked>
        Effets sonores
      </label>
    </div>
  </header>

  <main class="page" id="contenu">

    <!-- ===== Écran 1 : accueil ===== -->
    <section id="ecran-accueil" class="carte" aria-labelledby="titre-accueil">
      <h2 id="titre-accueil" tabindex="-1">Testez vos connaissances</h2>
      <p>Répondez aux questions avant la fin du temps : plus vous êtes rapide, plus vous gagnez de points.</p>

      <form id="formulaire-accueil">
        <!-- fieldset + legend : regroupe les boutons radio et les annonce correctement -->
        <fieldset class="niveaux">
          <legend>Choisissez un niveau</legend>
          <!-- Les trois niveaux sont créés par ui.js à partir de l'objet NIVEAUX -->
          <div id="liste-niveaux"></div>
        </fieldset>
        <button type="submit" class="bouton">Commencer</button>
      </form>

      <h3>Meilleurs scores</h3>
      <ul id="liste-meilleurs" class="meilleurs"></ul>
      <p id="note-stockage" class="aide">
        Les records sont gardés sur cet appareil quand le navigateur l'autorise ; sinon ils
        ne durent que le temps de la visite.
      </p>
    </section>

    <!-- ===== Écran 2 : question ===== -->
    <section id="ecran-question" class="carte" aria-labelledby="texte-question" hidden>
      <div class="infos">
        <span id="info-progression"></span>
        <span id="info-score"></span>
      </div>

      <!-- Minuteur : purement visuel (aria-hidden) ; les annonces vocales passent par #annonce -->
      <div class="minuteur" aria-hidden="true">
        <progress id="barre-temps" max="1" value="1"></progress>
        <span id="texte-temps"></span>
      </div>

      <!-- tabindex="-1" : permet de donner le focus par programme (pour les lecteurs d'écran) -->
      <h2 id="texte-question" tabindex="-1"></h2>

      <!-- Les 4 boutons de réponse sont créés par ui.js -->
      <div id="liste-choix" class="choix" role="group" aria-label="Propositions de réponse"></div>
      <p class="aide">Astuce clavier : touches 1 à 4 pour répondre, Entrée pour continuer.</p>

      <div id="zone-retour" class="retour" hidden>
        <p id="texte-retour"></p>
        <button type="button" id="bouton-suivant" class="bouton">Question suivante</button>
      </div>

      <button type="button" id="bouton-abandonner" class="bouton bouton--discret">Abandonner</button>
    </section>

    <!-- ===== Écran 3 : fin ===== -->
    <section id="ecran-fin" class="carte" aria-labelledby="titre-fin" hidden>
      <h2 id="titre-fin" tabindex="-1">Partie terminée</h2>
      <p id="resume-fin" class="gros"></p>
      <p id="message-record" class="record"></p>
      <button type="button" id="bouton-rejouer" class="bouton">Rejouer</button>
    </section>

    <!-- Zone d'annonces pour lecteurs d'écran (invisible).
         aria-live="polite" : le texte écrit ici est lu à voix haute sans couper la lecture en cours. -->
    <div id="annonce" class="sr-only" aria-live="polite"></div>
  </main>

  <footer class="pied">
    <p>Site pédagogique du Portail Antalaha – code ouvert : commencez par <code>js/main.js</code>.</p>
  </footer>

  <!-- ORDRE DE CHARGEMENT : chaque fichier ne doit utiliser que ce qui est déjà chargé.
       1. data/questions.js : les données (NIVEAUX, QUESTIONS)
       2. js/sons.js        : l'objet Sons (aucune dépendance)
       3. js/quiz.js        : l'objet Quiz (utilise NIVEAUX et QUESTIONS)
       4. js/ui.js          : l'objet UI   (utilise NIVEAUX)
       5. js/main.js        : relie le tout (utilise Quiz, UI, Sons) -->
  <script src="data/questions.js"></script>
  <script src="js/sons.js"></script>
  <script src="js/quiz.js"></script>
  <script src="js/ui.js"></script>
  <script src="js/main.js"></script>
</body>
</html>