JAVASCRIPT

자바스크립트 명언에 배경화면 처리

ture403 2023. 4. 17. 14:06

- Frederick Philips Brooks
Mythical Man-Month 저자
728x90
반응형

문제입니다.

명언 데이터를 가져옵니다. 그중에서 1개의 명언만 가져와서 문서의 #result 영역안에 있는 quote에 명원 내용을

author 안에는 말한 사람을 넣으세요 그리구 10마다 바뀌게 출력하세요.

길라잡이

무작위 수를 사용해서 명언을 가져온 후 명언 부분과 말한 사람 이름을 나눠서 화면에 영역에 표시힙니다.

 

완성화면 입니다.

 

HTML 코드입니다.

<body>
  <div id="result">
    <div class="num"></div>
    <div class="quote"></div> 
    <div class="author"></div>
  </div>
</body>
  •  HTML은 그냥 result 안에 감싸여진 div박스 3개가 있습니다.

JS 코드입니다.

const num = document.querySelector(".num");
const quote = document.querySelector(".quote");
const author = document.querySelector(".author");
const result = document.querySelector("#result");

let jsonAll =[];

//JSON 파일 불러오기  fetch문
function delay() {
fetch('https://dummyjson.com/quotes')
  .then(response => response.json())
  .then(json => {
    //변수 설정 
    let quotes = json.quotes
    //배열에 map을 써서 반복을 돌려서 값을 넣기
    jsonAll = quotes.map((el,index)=>{
      // console.log(el);

      //리턴을 위해서 변수로 저장함
      const quoteId = {
        author :el.author,
        quoteId : el.id,
        queotes : el.quote
      }

      // console.log(queoteMain);

      //return으로 밖으로 꺼냄
      return quoteId
    })
    // console.log(jsonAll)

    //변수 안에 랜덤하게 숫자를 저장
    let ran = Math.floor(Math.random()*jsonAll.length);
    // console.log(ran)

    //출력
    result.style.transition = "3s";
    result.style.background = `center / contain no-repeat url(https:source.unsplash.com/random/?coding=${Math.random()})`;
    num.innerHTML = jsonAll[ran].quoteId + ".";
    quote.innerHTML = jsonAll[ran].queotes;
    author.innerHTML = jsonAll[ran].author;
  })
  .catch((err) => console.log(err));
}
delay();
setInterval(delay, 10000);
  • 먼저 json파일을 불러와야하기 때문에 fetch문을 작성했습니다.
  • 변수 가져온 json파일에 quotes가 있고 그안에 데이터가 들어가 있습니다. 
  • 그래서 quotes를 변수에 담고 그걸 이제 map을 이용해서 반복문을 돌려서 변수 jsonAll 안에 배열에 담을 것입니다.
  • map안에 변수를 생성해서 그안에 json의 값을 입력해주었습니다. 
  • 그리고 그걸 return문으로 밖으로 출력시켰습니다. 리턴으로 출력이 안되면 map문 안에서만 동작되고 밖에서는 안보여지게 됩니다.
  • 그후 새로고침할때 계속 바뀌게 할꺼니 random 메서드를 써서 변수에 담았습니다.
  • 그리고 div박스를 선언 한다음 그안에 innerHTML을 통해 값을 넣어주었습니다.
  • 그리고 10초마다 변경을 해야하니 setinervel를 이용하기 위해서 함수로 묶어 주었습니다. 
  • 그후 1번은 출력해야기 떄문에 출력문 하나 써주고 그다음 setinerval 안에 넣어서 출력 했습니다. 
  • result를 선언해 줬고 그리고 result 안에 background 값을 .style 로 해서 넣어주었습니다. 그 안에 url를 넣어 주었고 파라미터로 넘겨주기때문에 Random 함수를 써서 작성했습니다.