내일배움단 11일 메이킹 챌린지_7일차

김재령·2021년 7월 27일
0

<할일..>
메인 페이지에 선택한 용량에 따른 결과페이지에 결과개수 출력하기

``` const main = document.querySelector("#main"); const qna = document.querySelector("#qna"); const result = document.querySelector("#result");

const endPoint = 15;
const select = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
const arr =new Array(0);
let flavor=0;
let count=0;

function checkOnlyOne(element) {
const checkboxes
= document.getElementsByName("size");

checkboxes.forEach((cb) => {
cb.checked = false;
})

element.checked = true;
}

function calResult() {

let size=begin();

console.log(select);

const result = select.indexOf(Math.max(...select));
console.log(result);

for(let i=0;i<=select.length;i++){

if(select[i]===select[result] && count<flavor-1){
  if(i===result){
    continue;
  }
  console.log(select[i]);
  arr.push(i);
  count++;
}
else if(select[i]===select[result]-1 && count<flavor-1){
  if(i===result){
    continue;
  }
  console.log(select[i]);
  arr.push(i);
  count++;

}

}
console.log(arr);

return result;
}

function setResult(){
let point = calResult();
const resultName = document.querySelector('.resultname');
resultName.innerHTML = infoList[point].name;

const resultImg = document.createElement('img');
const imgDiv = document.querySelector('#resultImg');
const imgURL = 'img/image-' + point + '.png';
resultImg.src = imgURL;
resultImg.alt = point;
resultImg.classList.add('img-fluid');
imgDiv.appendChild(resultImg);

const resultDesc = document.querySelector('.resultDesc');
resultDesc.innerHTML = infoList[point].desc;
}

function goResult(){
qna.style.WebkitAnimation = "fadeOut 1s";
qna.style.animation = "fadeOut 1s";
setTimeout(() => {
result.style.WebkitAnimation = "fadeIn 1s";
result.style.animation = "fadeIn 1s";
setTimeout(() => {
qna.style.display = "none";
result.style.display = "block"
}, 450)})
setResult();
}

function addAnswer(answerText, qIdx, idx){
const a = document.querySelector('.answerBox');
const answer = document.createElement('button');
answer.classList.add('answerList');
answer.classList.add('my-3');
answer.classList.add('py-3');
answer.classList.add('mx-auto');
answer.classList.add('fadeIn');

a.appendChild(answer);
answer.innerHTML = answerText;

answer.addEventListener("click", function(){
const children = document.querySelectorAll('.answerList');
for(let i = 0; i < children.length; i++){
children[i].disabled = true;
children[i].style.WebkitAnimation = "fadeOut 0.5s";
children[i].style.animation = "fadeOut 0.5s";
}
setTimeout(() => {
const target = qnaList[qIdx].a[idx].type;
for(let i = 0; i < target.length; i++){
select[target[i]] += 1;
}

  for(let i = 0; i < children.length; i++){
    children[i].style.display = 'none';
  }
  goNext(++qIdx);
},450)

}, false);
}

function goNext(qIdx){
if(qIdx === endPoint){
goResult();
return;
}

const q = document.querySelector('.qBox');
q.innerHTML = qnaList[qIdx].q;
for(let i in qnaList[qIdx].a){
addAnswer(qnaList[qIdx].a[i].answer, qIdx, i);
}
const status = document.querySelector('.statusBar');
status.style.width = (100/endPoint) * (qIdx+1) + '%';
}

function begin() {
let value = $("input[name='size']:checked").val();
if (value == undefined) {
alert('사이즈를 선택하세요!');
} else {

  main.style.WebkitAnimation = "fadeOut 1s";
  main.style.animation = "fadeOut 1s";
  setTimeout(() => {
      qna.style.WebkitAnimation = "fadeIn 1s";
      qna.style.animation = "fadeIn 1s";
      setTimeout(() => {
          main.style.display = "none";
          qna.style.display = "block"
      }, 450)
      let qIdx = 0;
      goNext(qIdx);
  }, 450);

  if (value === 'single') {
      flavor=1;
      console.log(flavor);
      return flavor;
  } else if (value === 'pint') {
      flavor = 3;
      console.log(flavor);
      return flavor;
  } else if (value === 'quarter') {
      flavor = 4;
      console.log(flavor);
      return flavor;
  } else if (value === 'family') {
      flavor = 5;
      console.log(flavor);
      return flavor;
  } else if (value === 'half') {
      flavor = 6;
      console.log(flavor);
      return flavor;
  }

}

}

/
function begin(){
main.style.WebkitAnimation = "fadeOut 1s";
main.style.animation = "fadeOut 1s";
setTimeout(() => {
qna.style.WebkitAnimation = "fadeIn 1s";
qna.style.animation = "fadeIn 1s";
setTimeout(() => {
main.style.display = "none";
qna.style.display = "block"
}, 450)
let qIdx = 0;
goNext(qIdx);
}, 450);
}
/

  
  
<html>
<title>배스킨라빈스 무슨 맛 먹을까?</title>
<link
  href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
  rel="stylesheet"
  integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
  crossorigin="anonymous"
/>
<link rel="stylesheet" href="./css/default.css" />
<link rel="stylesheet" href="./css/main.css" />
<link rel="stylesheet" href="./css/qna.css" />
<link rel="stylesheet" href="./css/animation.css" />
<link rel="stylesheet" href="./css/result.css" />
<style>
  @font-face {
    font-family: "BRBA_B";
    src: url("https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_seven@1.2/BRBA_B.woff")
      format("woff");
    font-weight: normal;
    font-style: normal;
  }
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
배스킨라빈스
무슨 맛 먹을까?
mainImage
mainImage
mainImage
mainImage
mainImage

배스킨라빈스 오늘은 무슨 맛 먹을지 고민이라면?
취향에 딱 맛는 맛을 골라드립니다.
아래 시작하기 버튼을 눌러 시작해보세요!

    <div class="check my-5">
      <label
        ><input
          type="radio"
          name="size"
          value="single"
          class="size-checkbox me-2"
          onclick="checkOnlyOne(this)"
        />싱글(1가지맛)</label
      >
      <label
        ><input
          type="radio"
          name="size"
          value="pint"
          class="size-checkbox me-2"
          onclick="checkOnlyOne(this)"
        />파인트(3가지맛)</label
      >
      <label
        ><input
          type="radio"
          name="size"
          value="quarter"
          class="size-checkbox me-2"
          onclick="checkOnlyOne(this)"
        />쿼터(4가지맛)</label
      >
      <label
        ><input
          type="radio"
          name="size"
          value="family"
          class="size-checkbox me-2"
          onclick="checkOnlyOne(this)"
        />패밀리(5가지맛)</label
      >
      <label
        ><input
          type="radio"
          name="size"
          value="halfGallon"
          class="size-checkbox me-2"
          onclick="checkOnlyOne(this)"
        />하프갤런(6가지맛)</label
      >
    </div>

    <button
      type="button"
      class="test-btn py-2 px-3 row mx-auto"
      onclick="js:begin()"
    >
      테스트 시작하기
    </button>
  </section>

  <section id="qna" class="mx-auto my-5 py-5 px-3">
    <div class="status mx-auto">
      <div class="statusBar"></div>
    </div>
    <div class="qBox my-5 py-3 mx-auto"></div>
    <div class="answerBox"></div>
  </section>

  <section id="result" class="mx-auto my-5 py-5 px-3">
    <h1 class="mb-5">내입맛에 딱맞는 아이스크림은?</h1>
    <div class="resultname"></div>
    <div
      id="resultImg"
      class="col-lg-3 col-md-4 col-sm-5 col-6 mx-auto"
    ></div>
    <div class="resultDesc mb-5"></div>
    <button type="button" class="result-btn py-2 px-3 me-3">
      테스트 다시하기
    </button>
    <button type="button" class="result-btn py-2 px-3 me-3">
      근처 매장찾기
    </button>
    <button type="button" class="result-btn py-2 px-3">공유하기</button>
  </section>

  <script src="./js/data.js" charset="utf-8"></script>
  <script src="./js/start.js" charset="utf-8"></script>
</div>
  
  콘솔창에서 보면 메인페이지에서 선택한 것에 따른 값 전달 O
  선택한 사이즈에 따른 배열생성 O
  배열 안의 값 = 제일 많이 선택된 맛 다음으로 많이 선택된 맛들
  배열의 크기 = 메인페이지에서 전달된 flavor변수 값
  
profile
with me

0개의 댓글