TEST&복습

마무리 문제풀이 4

hyejeong3283 2023. 4. 15. 21:14
728x90
반응형

문제

명언 데이터를 가져와 그 중에서 1개의 명언만 가져와서 문서의 #result 영역에 명언 내용과 말한 사람을 표시해보세요.

이 때 명언 내용은 #result 영역에 있는 .quote 영역에, 말한 사람은 .author 영역에 표시하세요.

10초마다 명언과 말한사람이 바뀌게 작업하세요.

 

HTML

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>명언 모음</title>
</head>
<body>
    <div id="main">
        <div class="quote"></div> 
        <div class="author"></div>
    </div>
</body>
</html>

CSS

<style>
    @import url('https://webfontworld.github.io/Montserrat/Montserrat.css');
    * {
        margin: 0 auto;
        padding: 0;
    }
    body {
        display:flex;
        justify-content:center;
        align-items:center;
        flex-direction:column;
        height: 100vh;
        background-color:#d398d9;
        text-align: center;
        font-size: 20px;
        font-family: "Montserrat";
        color: #7c2184;
    }
    .author {
        padding-top: 30px;
        text-decoration: underline;
        text-underline-offset: 10px;
    }
</style>

SCRIPT

<script>
    const quotesURL = "http://dummyjson.com/quotes";
    function randomQuote(){
        fetch(quotesURL)
        .then(response => response.json())
        .then(data => {
            let randomNumber = Math.floor(Math.random() * data.quotes.length);
            let divQuote = document.querySelector(".quote");
            let divAuthor = document.querySelector(".author");

            divQuote.innerHTML = data.quotes[randomNumber].quote;
            divAuthor.innerHTML = data.quotes[randomNumber].author;
        })
    }
    randomQuote();

    setInterval(randomQuote, 10000);
</script>

 

JSON 형식으로 된 명언 데이터가 들어있는 사이트의 주소를 quoteURL 변수에 저장합니다.

함수 randomQuote에 fetch(quoteURL)를 사용하여 명언데이터를 가져옵니다.

 

.then(response => response.json())

fetch 성공 했을 때 실행되는 것으로 가져온 데이터를 변수 response에 저장 후 데이터 형태를 json으로 바꿔줍니다.

 

.then(data => {
    let randomNumber = Math.floor(Math.random() * data.quotes.length);
    let divQuote = document.querySelector(".quote");
    let divAuthor = document.querySelector(".author");

    divQuote.innerHTML = data.quotes[randomNumber].quote;
    divAuthor.innerHTML = data.quotes[randomNumber].author;

})

json 형태로 변경된 데이터를 변수 data에 담은 후 0~데이터의 길이 사이의 숫자를 랜덤으로 randomNumber에 저장해줍니다.

 

Math.random() 은 JavaScript에서 제공하는 내장 함수 중 하나로, 0 이상 1 미만의 부동소수점 숫자를 반환합니다. 

반환되는 숫자는 균등하게 분포되어 있으므로, 이를 활용하여 무작위로 값을 생성하는 데 사용할 수 있습니다.

 

Math.floor()는 주어진 숫자를 소수점 이하를 버리고 내림한 정수를 반환하는 JavaScript 내장 함수입니다. 
무작위로 생성한 실수 값을 정수 값으로 변환하거나, 길이가 가변적인 배열의 인덱스를 계산하는 데 활용될 수 있습니다. 

 

setInterval 함수는 JavaScript에서 제공되는 내장 함수 중 하나로, 일정한 시간 간격으로 특정한 함수를 반복적으로 실행할 수 있도록 합니다.