Quotes
Momentum์ ๋ดค์ ๋, ๋งจ ํ๋จ์ ์๋ก๊ณ ์นจ์ ํ ๋๋ง๋ค ๋๋ค์ผ๋ก ๋ค๋ฅธ ๋ช ์ธ๋ค์ด ๋จ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ด๋ฒ ํํธ๋ ๊ทธ ๋ถ๋ถ์ ๊ตฌํํด ๋ณด๋ ๋จ๊ณ์ด๋ค.
๋ฏธ๋ฆฌ ์กฐ์ฌํ ๋ช ์ธ๋ค์ ๋ชจ์ Array๋ฅผ ๋ง๋ ๋ค. ์ด ๋ช ์ธ๋ค์ ์์ด์ฌ๋ ์ข๊ณ , ํ๊ตญ์ด์ฌ๋ ์ข๋ค. ๋๋ ๊ทธ๋ฅ... ์์ด ๋ณด์ด๋ ค๊ณ ์์ด๋ก ๋ชจ์๋จ๋ค. ์ฌ๊ธฐ์ ์ฃผ์ํ ์ ! ์ฝค๋ง(,)๋ฅผ ์๊ณ ๋ฐฐ์ด์ ์์ฑํ๋ฉด ์ ๋๋ค. ๊ฐ์ฅ ๊ธฐ์ด์ ์ด๋ฉฐ ๋ง์ ์ค์์ด๊ธฐ๋ ํ๋ค. ์ด ์ ์ ์ฃผ์ํ๋ฉฐ ์๋ ์ฝ๋์ฒ๋ผ quotes.js ํ์ผ์ ์์ฑํด ์ค๋ค. ๋ช ์ธ๋ค์ ์ด๊ณณ์์ ๊ฐ์ ธ์๋ค.
const quotes = [
{
quote: "You can't change what you are, only what you do.",
author: "Philip Pullman"
},
{
quote: "Lay a firm foundation with the bricks that others throw at you.",
author: "David Brinkley"
},
.
.
.
]
#1. Math Module
์ฐ๋ฆฌ๊ฐ ๊ฐ์ ธ์ค๊ณ ์ถ์ ๊ฒ์? ๋ช
์ธ ๋ฐฐ์ด์ ์ ์ฒด๊ฐ ์๋๋ผ ๋ช
์ธ ๋ฐฐ์ด ์ค ํ๋๋ฅผ ๋๋ค์ผ๋ก ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด์๋ ๊ทผ๋ณธ์ ์ผ๋ก ๋ฐฐ์ด์์ element ํ๋๋ฅผ ๊ฐ์ ธ์์ผ ํ๋๋ฐ, ์ด๋ฌํ ๊ฒฝ์ฐ์๋ ๋ฐฐ์ด์ด๋ฆ[๊ฐ์ ธ์ฌ๋ฐฐ์ด์์์]
๋ก ํํํ๋ฉด ๋๋ค. ์๋ฅผ ๋ค์ด, console.log๋ก ํ์ธํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ํ๋ฉด ๋๋ค. ๊ฐ๊ฐ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ๋ช
์ธ์ ๊ฐ์ ธ์จ ๋ชจ์ต์ด๋ค. ๋ฐฐ์ด์์ ์ฒซ ๋ฒ์งธ๋ 0์ด ๋๋ฉฐ, ๋ง์ง๋ง ์์๋ ๋ฐฐ์ด์ ๊ธธ์ด์์ 1์ ๋นผ๋ฉด ํ์ธํ ์ ์๋ค.
random()
๊ทธ๋ฐ๋ฐ, ์ฐ๋ฆฌ๊ฐ ๊ตฌํํ๊ณ ์ถ์ ๊ฒ์ ๋ญ๋ค? ๋๋ค์ผ๋ก ๋ช ์ธ์ด ํ์๋๋ ๊ฒ์ด๋ค. ์ด๋, ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด Math Module์ธ๋ฐ, JavaScript๊ฐ ๋ด์ฅํ๊ณ ์์ด ๊ฐํธํ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ ์ค์์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ๊ฒ์ random()์ด๋ค.
random()์ 0๋ถํฐ 1 ์ฌ์ด์ ๋๋คํ ์ซ์๋ฅผ ์ ๊ณตํ๋ค.
์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ 0๊ณผ 9์ฌ์ด์ ๋๋คํ ์ซ์! ๋งค์ฐ ๊ฐ๋จํ๋ค. ๋ค์ * ์ซ์๋ง ํด ์ฃผ๋ง ๋ง์ฌ ์ค์ผ์ด~ Math.random() * 10
์ ๊ฐ์ด ๋ง์ด๋ค.
(๋์ ์ฐฉ๊ฐ์ผ๋ก ์ฌ์ง์์๋ 9๋ก ์์ฑํ์๋๋ฐ 10์ ๋ฃ๋ ๊ฒ์ด ๋ง๋ค. item์ด 10๊ฐ์ด๊ธฐ ๋๋ฌธ์.)
round()
๊ทธ๋ฌ๋, ์ฌ์ ํ ์์์ ์ ๊ฐ์ง๊ณ ์ถ๋ ฅ๋๋๋ฐ ์ด๋ฅผ ํด๊ฒฐํ ํจ์๋ Math๊ฐ ๊ฐ์ง๊ณ ์๋ค.
๊ทธ ์ค ํ๋๊ฐ round()์ด๋ค. ์ด ํจ์๋ ์ฝ๊ฒ ๋งํ๋ฉด ๋ฐ์ฌ๋ฆผ์ ํด ์ฃผ๋ ํจ์์ด๋ค. Math.round(1.2)
๋ฅผ ์
๋ ฅํ๋ฉด 1์ ๋๋ ค์ฃผ๊ณ , Math.roud(1.8)
์ ์
๋ ฅํ๋ฉด 2๋ฅผ ๋๋ ค ์ค๋ค. 1.2์ ๋ฐ์ฌ๋ฆผ์ 1์ด๊ณ , 1.8์ ๋ฐ์ฌ๋ฆผ์ 2์ด๊ธฐ ๋๋ฌธ์.
ceil()
๊ทธ ๋ค์์ผ๋ก ์๊ฐํ ํจ์๋ ceil()์ด๋ค. ceil()๋ ์ซ์๋ฅผ ์ฒ์ฅ(ceil)๊น์ง ๋์ฌ์ฃผ๋ ํจ์์ด๋ค. ์ฆ, ๋ฐ์ฌ๋ฆผ์ด ์๋ ๊ทธ๋ฅ ์ฌ๋ฆผ์ ํด ๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ค. Math.ceil(1.0)
์ ์
๋ ฅํ๋ฉด ๊ทธ๋๋ก 1์ด ์ถ๋ ฅ๋๊ฒ ์ง๋ง, Math.ceil(1.1)
์ ์
๋ ฅํ๋ฉด 2๋ก ์ถ๋ ฅ์ด ๋๋ค.
floor()
๋ค์์ floor()์ด๋ค. floor()๋ ceil()๊ณผ ๋ฐ๋๋ก floor๊น์ง ์ซ์๋ฅผ ๋ด๋ ค ์ฃผ๋ ํจ์์ด๋ค. floor() ์์ 1.1์ ๋ฃ๋ 1.9๋ฅผ ๋ฃ๋ ์ถ๋ ฅ๋๋ ๊ฐ์ 1์ด ๋๋ค.
์ฌ๊ธฐ์, ์ฐ๋ฆฌ๊ฐ ๊ตฌํํ ๋๋ค์ ์ฌ์ฉํ๋ ๊ฒ์ ceil()๋ณด๋ค๋ floor()๊ฐ ๋ ์ ํฉํ๋ฏ๋ก, floor()์ ์ฌ์ฉํ์ฌ ๊ตฌํํ ๊ฒ์ด๋ค. ์์์ ๋ฏธ๋ฆฌ ๊ตฌํํด ๋ดค๋ 0๋ถํฐ 9๊น์ง์ ๋๋คํ ์ซ์๋ฅผ floor() ์์ ๋ฃ์ด ์ถ๋ ฅํ๋ฉด, ์ด์ ์ฐ๋ฆฌ๊ฐ ์ํ๋๋๋ก ์์์ ์์ด ๋๋คํ ์ซ์๋ฅผ ์ป์ ์ ์๋ค.
๊ทธ๋ผ ์ด์ ์ฐ๋ฆฌ๋ Math.floor(Math.random()*9)๊ฐ ๋๋คํ ์ซ์๋ฅผ ๋ํ๋ธ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด์ ํด์ผํ ๊ฒ์ ์ซ์๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ด ์๋, ๋ช ์ธ์ ์ถ๋ ฅํ๋ ๊ฒ. ์๊น console.log์ ํน์ ํ ๋ฐฐ์ด์ ์ถ๋ ฅํ๋ ๊ณณ์ ๋์ Math.floor(Math.random()*9)๋ฅผ ์ฝ์ ํ๋ฉด, ๋๋คํ ๋ฒ์งธ์ ๋ช ์ธ์ด ์ถ๋ ฅ๋๋ค.
console.log(quotes[Math.floor(Math.random()*9)]);
์ฌ๊ธฐ์ ๋ง๋ฌด๋ฆฌ๋ก, ํ์ฌ ์ฐ๋ฆฌ๋ ์ง์ ๋ฐฐ์ด์ ๊ฐฏ์๋ฅผ ์ธ๊ณ 10๊ฐ๋ผ๋ ๊ฒ์ ์์๋ธ ๋ค์ 10์์ 1์ ๋บ ๊ฒ์ quotes ๋ฐฐ์ด์ ๊ธธ์ด๋ก ๋ํ๋ด๊ณ ์๋ค. ๊ทธ๋ฌ๋, ๋ช
์ธ์ ์ถ๊ฐํ๊ฒ ๋๋ค๋ฉด? 9๋ณด๋ค ๋ ํฐ ์ซ์๊ฐ ๋ถ์ด์ผ ํ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ JavaScript๊ฐ ์์์ Array์ ๊ธธ์ด๋ฅผ ์์๋ด๋๋ก ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด ์ฃผ์ด์ผ ํ๋ค. Array์ ๊ธธ์ด๋ฅผ ํํํ๋ ๋ฒ์? Array.length
์ด๋ค. ์ฐ๋ฆฌ์ Array ์ด๋ฆ์ quotes์ด๋ฏ๋ก, quotes.length
๋ก ํํํด ์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋๋ค ๋ช ์ธ์ ์ถ๋ ฅํ ์ ์๋ ์ฝ๋๊ฐ ์์ฑ๋์๋ค! ๋ง์ด ์ฌ์ฉํ ์์ ์ด๋ 'todaysQuote'๋ผ๋ ์ด๋ฆ์ ์์์ ์ ์ฅํด ๋๋๋ก ํ์.
#2. innerText
์ด์ ๋ง๋ฌด๋ฆฌ ์์
. ์ด ๋๋คํ ๋ช
์ธ๋ค์ ํ์ด์ง์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์ HTML์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋๋ span ์์ ์์ ๊ทธ ๋ช
์ธ๋ค์ด ๋ณด์ด๋๋ก innerText ์์
์ ํด ์ฃผ๋ ์ผ๋ง ๋จ์๋ค. ์ด ๋ถ๋ถ์ ์์์๋ ๋ง์ด ํ ์์
์ด๊ธฐ ๋๋ฌธ์ ์์ํ ๊ฑฐ๋ค. quote.innerText = todaysQuote
์ author.innerText = todaysQuote
๋ก ๊ตฌํ์ ํด ์ค ์ ์์ ํ
๋ฐ, ์ฐ๋ฆฌ๋ todaysQuote์ ๊ฐ๊ฐ ๋ช
์ธ๊ณผ ์๊ฐ ์ด๋ฆ์ด ๋ค์ด์๋ค๋ ๊ฒ์ ์์ผ๋ฉด ์ ๋๋ค. quote์๋ todaysQuote์ ์๋ ๋ช
์ธ์ด ์
๋ ฅ๋์ด์ผ ํ ๊ฒ์ด๊ณ , author์๋ todaysQuote์ ์๋ ์๊ฐ ์ด๋ฆ์ด ์
๋ ฅ๋์ด์ผ ํ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์๋์ ๊ฐ์ด ๊ตฌํํ๋ค.
const quote = document.querySelector("#quote span:first-child");
const author = document.querySelector("#quote span:last-child");
const todaysQuote = quotes[Math.floor(Math.random()*quotes.length)];
quote.innerText = todaysQuote.quote;
author.innerText = todaysQuote.author;
Background
Momentum์์ ๋๋ค์ผ๋ก ๋์ค๋ ๊ฒ์ ๋ช ์ธ ๋ฟ์ด ์๋๋ค. ๋ฐฐ๊ฒฝํ๋ฉด๋ ํจ๊ป ์๋ก๊ณ ์นจ์ ํ ๋๋ง๋ค ๋๋ค์ผ๋ก ๋ฐ๋์ด์ ๋ํ๋๊ณ ์๋ค. ์ด๋ฒ ํํธ์์๋ ๊ทธ Background๋ฅผ ๊ตฌํํด ๋ณผ ์์ ์ด๋ค.
์ ์ผ ๋จผ์ ํด ์ค ์์ ์ background.js ํ์ผ์ ๋ง๋ค์ด ์ฃผ๋ ๊ฒ๊ณผ img ํด๋๋ฅผ ๋ง๋ค์ด ์ด๋ฏธ์ง ํ์ผ์ ๋ฃ์ด ์ฃผ๋ ์์ ์ด๋ค. ๋๋ img ํด๋์ ์ธ ๊ฐ์ ์ด๋ฏธ์ง ํ์ผ์ ๋ฃ์ด ์ฃผ์๋ค. ๊ฐ๊ฐ ์ด๋ฆ์ 0, 1, 2๋ก ์ ์ฅํ์ฌ ๋ฃ์ด ์ฃผ์๋๋ฐ ํ์ผ ์ด๋ฆ์ ์์ ์ด๋ค. ๋๋ ๊ทธ๋ฅ ๋ด๊ฐ ์์๋ณด๊ธฐ ์ฝ๊ฒ ํ๊ธฐ ์ํด ์ ๋ ๊ฒ ๋ฃ์ด ์ฃผ์๋ค. HTML ํ์ผ์ js ํ์ผ์ import ํด ์ฃผ๋ ์์ ๋ ์์ง ๋ง์์ผ ํ๋ค.
์ด ์์ ์ ์์์ ๋๋ค ๋ช ์ธ์ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ๊ณผ ๋งค์ฐ ์ ์ฌํ๋ค. ๊ฑฐ์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ๋ฉด ๋๋ค๊ณ ๋ด๋ ๋ฌด๋ฐฉํ๋ค. HTML์ ์ด๋ ํ ์์๋ก ์ถ๋ ฅ๋๋๋๋ง ๋ค๋ฅผ ๋ฟ. ๋ช ์ธ์ ๊ตฌํํ๋ ๊ฒ์ฒ๋ผ ์ด๋ฏธ์ง ํ์ผ๋ค๋ images ๋ผ๋ ๋ฐฐ์ด์ ๊ฐ๊ฐ ๋ด์ ์ฃผ๊ณ , Math ํจ์๋ค์ ์ฌ์ฉํ์ฌ ๋๋ค ์ซ์๋ฅผ ์ถ์ถํ๋ ๋ถ๋ถ์ ๊ทธ๋๋ก ๊ฐ์ ธ์ ์์ ์ ์ธ์ ํด ์ฃผ๋ฉด ๋๋ค.
const images = [
"0.jpg",
"1.jpg",
"2.jpg",
];
const chosenImage = images[Math.floor(Math.random()*quotes.length)];
๋ฒ์จ ๋ค ๋๋ฌ๋ค. ์ด์ HTML์ ๋ํ๋๊ฒ๋ง ํด ์ฃผ๋ฉด ๋์ด๋ค. ์ฌํ๊น์ง ์ฐ๋ฆฌ๋ HTML ์์๋ฅผ ์ถ๊ฐํ์ฌ JS ํ์ผ์์ ๋ถ๋ฌ์ ์์ ์ ํ๋๋ฐ, ์ด๋ฒ์ ์ข ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผํ ๊ฒ์ด๋ค. ์๋? ๋ฏธ๋ฆฌ HTML ์์์ ์์๋ฅผ ์ ์ธํด ์ฃผ๋ฉด ์ด๋ฏธ์ง ํ์ผ์ ํน์ ๋ ํ์ผ๋ก ๊ณ ์ ํ์ฌ ๊ตฌํํ ์๋ฐ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. JS ํ์ผ์์ HTML ์์๋ฅผ ํ๋ ๋ง๋ค์ด ์ฃผ์ด HTML์ ์ฝ์ ํ๋ ์์ ์ ํ ๊ฒ์ธ๋ฐ, ์ด๋ createElement ๋ผ๋ ๊ฒ์ ์ฌ์ฉํ ๊ฒ์ด๋ค. ์ํ๋ HTML ์์๋ฅผ ๋ง๋ค์ด ์ฃผ๋ method์ด๋ค. ๊ดํธ ์์ ์ํ๋ ์์๋ฅผ ์ ์ผ๋ฉด ๊ทธ ์์๊ฐ ์์ฑ๋๋ค. ์ฐ๋ฆฌ๋ img ์์๊ฐ ํ์ํ๋ img ์์๋ฅผ ์์ฑํ๋๋ก ํ์.
const image = document.createElement("img");
๊ทธ๋ฌ๋, ์ฐ๋ฆฌ๊ฐ img ํด๋์ ์ถ๊ฐํ ์ด๋ฏธ์ง๋ค์ ๋ณด์ด๊ธฐ ์ํด์๋ img ์์๋ง ์์ผ๋ฉด ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก img ์์๋ <img src="/~" />
๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ src๋ก ์ด๋ฏธ์ง๋ค์ ๊ฒฝ๋ก๋ฅผ ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค. ์ฌ๊ธฐ์ ๊ณตํต์ ์ผ๋ก ๋ชจ๋ img๋ผ๋ ํด๋์ ์์ผ๋ฏ๋ก img/ ๊น์ง ๋ฃ์ด ์ค ํ, ๊ทธ ๋ค์ ๋๋คํ ํ์ผ์ ์ด๋ฆ์ด ๋ค์ด๊ฐ ์์ ์ด๋ chosenImage๋ฅผ ์
๋ ฅํด ์ค๋ค.
image.src = `img/${chosenImage}`;
์ด์ , ์ง์ง๋ก ๋ง์ง๋ง! HTML์ ์ค์ ๋ก ์ถ๊ฐํ์ฌ ์ฐ๋ฆฌ ๋์ ๋ณด์ด๋๋ก ํ์. ํ๋์ method ์ฌ์ฉ์ผ๋ก ์ฝ๊ฒ ๊ฐ๋ฅํ๋ค. ๋ฐ๋ก appendChild
! ์ฐ๋ฆฌ๋ body ์์๋ฅผ ๋ถ๋ฌ์จ ์ ์ด ์๊ธฐ ๋๋ฌธ์ document.body
๋ก body ์์๋ฅผ ๋ถ๋ฌ์จ ํ, appendChild๋ก image๋ฅผ ์ถ๊ฐํด ์ฃผ๋ฉด ์ํ๋ ์์
์ ๋๋๋ค.
document.body.appendChild(image);
Quotes And Background ํํธ๋ฅผ ๋ง๋ฌด๋ฆฌํ๋ฉฐ
์ฝ๋ฉ ์ฐ์ง ํ ๋ฌ ์ ๋๊ฐ ๋์ด ์ค๋๋ง์ ๋ง๋๋ Math ๊ฐ์ฒด๊ฐ ๊ฝค๋ ๋ฐ๊ฐ์ด ํํธ์๋ค. appenChild๋ ๋ง์ฐฌ๊ฐ์ง! ์ด๋ฐ ๋ฐฉ๋ฒ๋ ์์์ง~ ํ๋ฉฐ ๋๋์ ๋ณด๋ ํํธ์๋ ๊ฒ ๊ฐ๋ค. ์ฌ์ค ๊ฐ์ ๋ง์ด ์์์ด์ ํผ์ ํ๊ธฐ์๋ ๋ง๋งํ ํด๋ก ์์ ์ด ๋์์ ๊ฒ ๊ฐ์๋ฐ ๋๊ผฌ ์ค๊ณผ ํจ๊ป ํ๋ ์ข ๋ ์์ํ๊ณ , ๋ณต์ตํ๋ ๊ธฐ๋ถ์ด๋ผ ์ฌ๋ฏธ์๋ค. ์ ์ ์ด๋ป๊ฒ ๊ตฌํํ๋ฉด ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋์ง ์์๊ฐ๊ณ ์๋ ์ค!