質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.91%

ランダム表示形式のクイズJSで格納した画像を表示させるようにするにはどうしたら良いでしょうか?

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 103

Toshiki0615

score 0

前提・実現したいこと

JS上で配列として格納させた画像を表示させたいです。加えて、しっかりと表示ができたら、CSSで修正できるようにしたいです。CSS上でも、どのようにしたらimgの調整ができるのか教えて頂けるとありがたいです。

発生している問題・エラーメッセージ

画像を表示したい位置に画像ではなく文字がでてきてしまっています

該当のソースコード

  <div class="gwd-page-content gwd-div-zdu5">
        <section class="container">
          <p id="question"></p>
          <div id=""></div>
          <ul id="image">
            <li>
              <div>A0</div>
              <div>
                <gwd-image source="a0.png" id="img[0].src"></gwd-image>
              </div>
            </li>
            <li>
              <div>A1</div>
              <div>
                 <gwd-image source="a1.png" id="img[1].src"></gwd-image>
              </div>
            </li>
            <li>
              <div>A2</div>
              <div>
                <gwd-image source="a2.png" id="img[2].src"></gwd-image>
              </div>
            </li>
          </ul>
          <ul id="choices"></ul>
          <div id="btn" class="disabled">Next</div>
          <section id="result" class="hidden">
            <p></p>
            <a href="https://www.rakuten.co.jp/">申込へ進む</a>
          </section>
        </section>
        <script src="main.js"></script>
      </div>
'use strict';

{
  const question = document.getElementById('question');
  const image = document.getElementById('image');
  const choices = document.getElementById('choices');
  const btn = document.getElementById('btn');
  const result = document.getElementById('result');
  const scoreLabel = document.querySelector('#result > p');

  const quizSet = shuffle([
    {q: 'What is A?', c: ['A0', 'A1', 'A2'], pic: 'img[0].src'},
    {q: 'What is B?', c: ['B0', 'B1', 'B2'], pic: 'img[1].src'},
    {q: 'What is C?', c: ['C0', 'C1', 'C2'], pic: 'img[2].src'},
  ]);
  let currentNum = 0;
  let isAnswered;
  let score = 0;
  let img = new Array();
     img[0] = new Image();
     img[0].src="img/img1.png";
     img[1] = new Image();
     img[1].src="img/img2.png";
     img[2] = new Image();
     img[2].src="img/img3.png";
     img[3] = new Image();
     img[3].src="img/img4.png";
     img[4] = new Image();
     img[4].src="img/img5.png";
     img[5] = new Image();
     img[5].src="img/img6.png";

  function shuffle(arr) {
    for (let i = arr.length - 1; i > 0; i--) {
      const j = Math.floor(Math.random() * (i + 1));
      [arr[j], arr[i]] = [arr[i], arr[j]];
    }
    return arr;
  }

  function checkAnswer(li) {
    if (isAnswered) {
      return;
    }
    isAnswered = true;

    if (li.textContent === quizSet[currentNum].c[0]) {
      li.classList.add('correct');
      score++;
    } else {
      li.classList.add('wrong');
    }

    btn.classList.remove('disabled');
  }

  function setQuiz() {
    isAnswered = false;

    question.textContent = quizSet[currentNum].q;
    image.innerHTML = quizSet[currentNum].pic;

    while (choices.firstChild) {
      choices.removeChild(choices.firstChild);
    }

    const shuffledChoices = shuffle([...quizSet[currentNum].c]);
    shuffledChoices.forEach(choice => {
      const li = document.createElement('li');
      li.textContent = choice;
      li.addEventListener('click', () => {
        checkAnswer(li);
      });
      choices.appendChild(li);
    });

    if (currentNum === quizSet.length - 1) {
      btn.textContent = 'Show Score';
    }
  }

  setQuiz();

  btn.addEventListener('click', () => {
    if (btn.classList.contains('disabled')) {
      return;
    }
    btn.classList.add('disabled');

    if (currentNum === quizSet.length - 1) {
      scoreLabel.textContent = `Score: ${score} / ${quizSet.length}`;
      result.classList.remove('hidden');
    } else {
      currentNum++;
      setQuiz();
    }
  });
}
body {
  font-size: 40px;
  font-family: Verdana, sans-serif;
}

.container {
  width: 1100px;
  margin: 20px auto;
  background: #fff;
  border-radius: 4px;
  padding: 32px;
  position: relative;
}

#question {
  margin-bottom: 32px;
  font-weight: bold;
}

#img {
  margin-bottom: 32px;
  font-weight: bold;
}

#choices {
  list-style: none;
  padding: 0;
  margin-bottom: 32px;
}

#choices > li {
  border: 1px solid #ccc;
  border-radius: 4px;
  padding: 10px;
  margin-bottom: 10px;
  cursor: pointer;
}

#choices > li:hover {
  background: #f8f8f8;
}

#choices > li.correct {
  background: #d4edda;
  border-color: #c3e6cb;
  color: #155724;
  font-weight: bold;
}

#choices > li.correct::after {
  content: ' ... correct!';
}

#choices > li.wrong {
  background: #f8d8da;
  border-color: #f5c6cb;
  color: #721c24;
  font-weight: bold;
}

#choices > li.wrong::after {
  content: ' ... wrong!';
}

#btn, #result > a {
  background: #3498db;
  padding: 8px;
  border-radius: 4px;
  cursor: pointer;
  text-align: center;
  color: #fff;
  box-shadow: 0 4px 0 #2880b9;
}

#btn.disabled {
  background: #ccc;
  box-shadow: 0 4px 0 #bbb;
  opacity: 0.7;
}

#result {
  position: absolute;
  width: 1000px;
  background: #fff;
  padding: 30px;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
  top: 200px;
  left: 0;
  right: 0;
  margin: 0 auto;
  border-radius: 4px;
  text-align: center;
  transition: 0.4s;
}

#result.hidden {
  transform: translateY(-500px);
}

#result > p {
  font-size: 125px;
    text-decoration: bold;
}

#result > a {
  display: block;
  text-decoration: none;
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る